2017-05-23 45 views
1

以下代码有效。但是,我试图在SQL中多次执行同一个函数。因此,我想声明一个变量,以便用户只需使用SQL开头的登录名进行更新即可。SQL使用@variable和IN运算符来插入表

INSERT user_role (logon, role_name) 
SELECT logon, 'QUERY' AS 'role_name' 
FROM user_table 
WHERE logon NOT IN ('bill', 'tim', 'dave' ) 

当我添加变量@Names时,IN运算符不会返回正确的结果。它基本上忽略了变量并将所有用户插入表中。如果我在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 ("[email protected]+")") 

我甚至试着改变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 ("[email protected]+")") 

我试图复制这个SQL在多个地点使用,减少用户的交互量,使其工作。希望这个问题有一个简单的解决方案。

回答

0

在最后一个代码,你就得改变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 ("[email protected]+")") 
+0

它的工作!它总是那些小东西...... – Scott

0

IIRC,双引号的字段名称标识,如方括号。您必须为字符串使用单引号。

试试这个:

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