SQL 函数通过引用获取列
SQL Function Get Column By Reference
假设有 3 个 table:性别、国家和用户。 Users 中有一个名为 Gender 的列,还有一个名为 Country 的列。
我想向用户添加一个新条目,select Male/Female {M, F} 列之一和国家行动态添加一个国家,仅用于测试目的。
insert into dbo.[Users] (Gender, UserName, Country)
select Genders.Male, 'newbie', Countries.(the one which matches column CountryId) FROM Genders, Countries
我想实现这个:'M'、'newbie'、我的国家
应用 'zip' 的建议后,我得到结果 2 行受影响 ,与外部 tables 我正在引用。查询添加了 2 行,所以我想我缺少 WHERE 条件。
性别 Table 是 属性 并且只有一行是我手动添加的。
Table Genders; 1 row
Male : uniqueidentifier
Female : uniqueidentifier
Countries 是一个有很多行的 table,所以我想 select 一个匹配其中一个列值的标准,比如列 CountryId 的值。
您可以使用以下方法获取随机值:
insert into dbo.[Users] (Gender, UserName)
select top (1) g.Male, 'newbie'
from Genders.Male
order by newid();
我找到了解决方案。感谢所有为我指明正确方向的回复。
INSERT INTO dbo.[Users] (Gender, UserName, Country)
SELECT Genders.Male, 'newbie', Countries.CountryId
FROM Genders, Countries
WHERE Countries.ISO2 = '##'
'##' = 国家/地区的 2 个字母 ISO。
说明:
1. INSERT INTO dbo.[Users]
= 添加一个新行到 Table "Users"
2. (Gender, UserName, Country)
= 包括 table "Users" 中的列。如果未指定列并且它具有不允许空值的 属性,则会抛出异常!
3. FROM Genders, Countries
= 包含要查找的外部 tables
4. WHERE Countries.ISO2 = '##'
= 这个条件可以让你精确地select 你要找哪一行哪一列。因此,我搜索了某一行,其中名为 ISO2 的列的值为“##”,然后在同一行(条目)中查找 CountryId 值。可能存在多行具有相同值的情况,因此您必须使用 AND 或 OR 运算符进一步指定条件。
当 table 不包含超过 1 行时,我不应该应用 WHERE 条件。它将 select 默认存在。但是因为 Countries Table 有多个项目(3 行),将 WHERE 子句排除在外,导致添加 3 次相同的用户,每行都有不同的 CountryId!
假设有 3 个 table:性别、国家和用户。 Users 中有一个名为 Gender 的列,还有一个名为 Country 的列。
我想向用户添加一个新条目,select Male/Female {M, F} 列之一和国家行动态添加一个国家,仅用于测试目的。
insert into dbo.[Users] (Gender, UserName, Country)
select Genders.Male, 'newbie', Countries.(the one which matches column CountryId) FROM Genders, Countries
我想实现这个:'M'、'newbie'、我的国家
应用 'zip' 的建议后,我得到结果 2 行受影响 ,与外部 tables 我正在引用。查询添加了 2 行,所以我想我缺少 WHERE 条件。
性别 Table 是 属性 并且只有一行是我手动添加的。
Table Genders; 1 row
Male : uniqueidentifier
Female : uniqueidentifier
Countries 是一个有很多行的 table,所以我想 select 一个匹配其中一个列值的标准,比如列 CountryId 的值。
您可以使用以下方法获取随机值:
insert into dbo.[Users] (Gender, UserName)
select top (1) g.Male, 'newbie'
from Genders.Male
order by newid();
我找到了解决方案。感谢所有为我指明正确方向的回复。
INSERT INTO dbo.[Users] (Gender, UserName, Country)
SELECT Genders.Male, 'newbie', Countries.CountryId
FROM Genders, Countries
WHERE Countries.ISO2 = '##'
'##' = 国家/地区的 2 个字母 ISO。
说明:
1. INSERT INTO dbo.[Users]
= 添加一个新行到 Table "Users"
2. (Gender, UserName, Country)
= 包括 table "Users" 中的列。如果未指定列并且它具有不允许空值的 属性,则会抛出异常!
3. FROM Genders, Countries
= 包含要查找的外部 tables
4. WHERE Countries.ISO2 = '##'
= 这个条件可以让你精确地select 你要找哪一行哪一列。因此,我搜索了某一行,其中名为 ISO2 的列的值为“##”,然后在同一行(条目)中查找 CountryId 值。可能存在多行具有相同值的情况,因此您必须使用 AND 或 OR 运算符进一步指定条件。
当 table 不包含超过 1 行时,我不应该应用 WHERE 条件。它将 select 默认存在。但是因为 Countries Table 有多个项目(3 行),将 WHERE 子句排除在外,导致添加 3 次相同的用户,每行都有不同的 CountryId!