Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 将变量值设置为字符串数组_Sql_Sql Server 2008 - Fatal编程技术网

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