SQL 使用带有 IN 运算符的 @variable 来插入一个 table

SQL use @variable with the IN operator to INSERT INTO a table

以下代码有效。但是,我试图在 SQL 中多次执行相同的功能。因此,我想声明一个变量,这样用户只需要用 SQL.

开头的登录名更新它
INSERT user_role (logon, role_name)
SELECT logon, 'QUERY' AS 'role_name' 
FROM user_table 
WHERE logon NOT IN ( 'bill', 'tim', 'dave'  )

当我添加变量@Names 时,IN 运算符没有return 正确的结果。它基本上忽略变量并将所有用户插入 table。如果我在 WHERE 语句中将“(@Names)”更改为“@Names”,我会在关键字@Names 附近收到不正确的语法错误。

DECLARE @Names VARCHAR(100)
SELECT @Names = " 'bill', 'tim', 'dave' "

INSERT user_role (logon, role_name)
SELECT logon, 'QUERY' AS 'role_name' 
FROM user_table 
WHERE logon NOT IN ( @Names )

我确实遇到过 EXEC 函数,但它似乎无法与 INSERT 函数一起使用。我在关键字 EXEC 附近收到不正确的语法错误。

DECLARE @Names VARCHAR(100)
SELECT @Names = " 'bill', 'tim', 'dave' "

INSERT user_role (logon, role_name)
EXEC("SELECT logon, 'QUERY' AS 'role_name' 
FROM user_table
WHERE logon NOT IN ("+@Names+")")

我什至尝试更改 INSERT 语句所在位置的顺序,但这也没有用。我在关键字 FROM 附近收到不正确的语法错误。

DECLARE @Names VARCHAR(100)
SELECT @Names = " 'bill', 'tim', 'dave' "

EXEC("SELECT logon, 'QUERY' AS 'role_name' 
INSERT user_role (logon, role_name)
FROM user_table 
WHERE logon NOT IN ("+@Names+")")

我正在尝试复制此 SQL 以在多个站点使用,并尽量减少用户交互量以使其发挥作用。希望这个问题有一个简单的解决方案。

在最后一个代码中,您必须更改 INSERTSELECT 顺序:

DECLARE @Names VARCHAR(100)
SELECT @Names = " 'bill', 'tim', 'dave' "

EXEC("INSERT user_role (logon, role_name)
SELECT logon, 'QUERY' AS 'role_name' 
FROM user_table 
WHERE logon NOT IN ("+@Names+")")

IIRC,双引号是字段名称标识符,就像方括号一样。您必须对字符串文字使用单引号。

试试这个:

SELECT @Names = ' ''bill'', ''tim'', ''dave'' '