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!