SQL使用@variable和IN运算符来INSERT INTO表

时间:2017-05-23 12:52:25

标签: sql sybase

以下代码有效。但是,我试图在整个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运算符不会返回正确的结果。它基本上忽略变量并将所有用户插入表中。如果我改变"(@ Name)"只是" @ Names"在WHERE语句中,我在关键字@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以在多个站点中使用,并最大限度地减少用户交互量以使其工作。希望这个问题有一个简单的解决方案。

2 个答案:

答案 0 :(得分: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 ("+@Names+")")

答案 1 :(得分:0)

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

试试这个:

SELECT @Names = ' ''bill'', ''tim'', ''dave'' '
相关问题