Sql 将变量值设置为字符串数组
我想将一个变量设置为一个值字符串。例如Sql 将变量值设置为字符串数组,sql,sql-server-2008,Sql,Sql Server 2008,我想将一个变量设置为一个值字符串。例如 declare @FirstName char(100) select @FirstName = 'John','Sarah','George' SELECT * FROM Accounts WHERE FirstName in (@FirstName) 我在选择@FirstName='John'、'Sarah'、'George'行中遇到语法错误: Incorrect syntax near ',' 有什么方法可以用许多值来设置变量吗?您正在尝试为
declare @FirstName char(100)
select @FirstName = 'John','Sarah','George'
SELECT *
FROM Accounts
WHERE FirstName in (@FirstName)
我在选择@FirstName='John'、'Sarah'、'George'
行中遇到语法错误:
Incorrect syntax near ','
有什么方法可以用许多值来设置变量吗?您正在尝试为单个字符串变量分配三个单独的字符串文字。有效的字符串变量应该是
'John,Sarah,George'
。如果要在双引号之间嵌入单引号,则必须对其进行转义
另外,实际的
SELECT
也不起作用,因为SQL数据库不会将字符串变量解析为单独的文本值。您需要改用动态SQL,然后执行该动态SQL语句。(在此网站上搜索动态SQL
,以您使用的数据库引擎为主题(如[sqlserver]动态SQL
),您应该会得到几个示例。)在SQL
中,您不能有变量数组。但是,最好的替代解决方案是使用。您的示例包含3个不同的SQL语句还是仅包含1个?还有,您使用的是什么SQL?此外,如果您能给出这些行中哪一行附近的语法是错误的,这会有所帮助。我认为问题基本上是“SQL Server支持数组吗?”我相信答案是否定的,但我会等待SQL Server专家的评论。@MikeChristensen,我并不是说自己是专家,但不是,SQL Server不支持阵列如果您要问这样的问题,您应该指定您正在使用的数据库,以及语法和支持更改-例如,SQL Server可能接受MySQL不接受的内容(反之亦然)。标记
SQL
对于特定的SQL问题来说太通用了。另一种可能的重复方法是解析到临时表中,然后连接到临时表中。@Mike:True,但a)需要先解析,b)如果用户不知道如何分配字符串变量(不计算SET
错误),解析可能会有点多,我不知道如何建议对该示例进行搜索。好的一点,设置和选择有什么区别?我想您可以使用其中任何一个。@HL8:直接设置局部变量的值,而要求您首先分别声明变量。它们相似,但不能互换。@HL8:reset vs SELECT:Ken搞错了。SET和SELECT都需要声明变量,所以这两者没有区别。事实上,就这一特定问题而言,这两个问题很可能是可互换的,尽管总的来说,正如肯正确指出的那样,它们确实有各自的特点。这可能是选择的答案,因为它正是OP想要的。这SELECT*FROM@tab
很奇怪!我们不想从刚才声明的变量中进行选择,我们想从帐户中进行选择,因为“in”是一个骗局,基本上是一个“=”,因为FirstName在@tab
中每行只保存一个值。lavazza_或_jps的回答中的从帐户中选择,可以显示所需内容,并且效果良好
declare @tab table(FirstName varchar(100))
insert into @tab values('John'),('Sarah'),('George')
SELECT *
FROM @tab
WHERE 'John' in (FirstName)
-- create test table "Accounts"
create table Accounts (
c_ID int primary key
,first_name varchar(100)
,last_name varchar(100)
,city varchar(100)
);
insert into Accounts values (101, 'Sebastian', 'Volk', 'Frankfurt' );
insert into Accounts values (102, 'Beate', 'Mueller', 'Hamburg' );
insert into Accounts values (103, 'John', 'Walker', 'Washington' );
insert into Accounts values (104, 'Britney', 'Sears', 'Holywood' );
insert into Accounts values (105, 'Sarah', 'Schmidt', 'Mainz' );
insert into Accounts values (106, 'George', 'Lewis', 'New Jersey' );
insert into Accounts values (107, 'Jian-xin', 'Wang', 'Peking' );
insert into Accounts values (108, 'Katrina', 'Khan', 'Bolywood' );
-- declare table variable
declare @tb_FirstName table(name varchar(100));
insert into @tb_FirstName values ('John'), ('Sarah'), ('George');
SELECT *
FROM Accounts
WHERE first_name in (select name from @tb_FirstName);
SELECT *
FROM Accounts
WHERE first_name not in (select name from @tb_FirstName);
go
drop table Accounts;
go