Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.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_Tsql_Sql Server 2014 - Fatal编程技术网

SQL转换问题

SQL转换问题,sql,sql-server,tsql,sql-server-2014,Sql,Sql Server,Tsql,Sql Server 2014,我有一个临时表,我在其中创建一个逗号分隔列表中列的所有值。。我面临的问题是,当我输入csv变量时,我会出错 前 这是在查询中添加单引号,我得到的错误如下 转换varchar值1','2'…时转换失败。。。。。。。。整型 对此有什么建议吗?您似乎喜欢使用动态SQL。确保您的括号都对应且正确 set @testvar= stuff( (select ',''' + cast(var1 as varchar(1024))+ '''' From #Temp for xml path('')) ,1,1

我有一个临时表,我在其中创建一个逗号分隔列表中列的所有值。。我面临的问题是,当我输入csv变量时,我会出错 前

这是在查询中添加单引号,我得到的错误如下 转换varchar值1','2'…时转换失败。。。。。。。。整型


对此有什么建议吗?您似乎喜欢使用动态SQL。确保您的括号都对应且正确

set @testvar= stuff( 
(select ',''' + cast(var1 as varchar(1024))+ ''''
From #Temp for xml path(''))
,1,1,'') 


Select * from tab1 where col1 in (@testvar)
这是一个样本

CREATE TABLE #Temp(
    var1 INT
);

INSERT INTO #Temp VALUES (1);
INSERT INTO #Temp VALUES (2);

create table tab1(
  col1 int
);

insert into tab1 values (1)
insert into tab1 values (3)

Declare @testvar varchar (max)
Declare @query varchar (max)

set @testvar= stuff( 
(select ',''' + cast(var1 as varchar(1024))+ ''''
From #Temp for xml path(''))
,1,1,'') 


SET @query = 'Select * from tab1 where col1 in ('+@testvar+')'



execute(@QUERY)

您似乎喜欢使用动态SQL。确保您的括号都对应且正确

set @testvar= stuff( 
(select ',''' + cast(var1 as varchar(1024))+ ''''
From #Temp for xml path(''))
,1,1,'') 


Select * from tab1 where col1 in (@testvar)
这是一个样本

CREATE TABLE #Temp(
    var1 INT
);

INSERT INTO #Temp VALUES (1);
INSERT INTO #Temp VALUES (2);

create table tab1(
  col1 int
);

insert into tab1 values (1)
insert into tab1 values (3)

Declare @testvar varchar (max)
Declare @query varchar (max)

set @testvar= stuff( 
(select ',''' + cast(var1 as varchar(1024))+ ''''
From #Temp for xml path(''))
,1,1,'') 


SET @query = 'Select * from tab1 where col1 in ('+@testvar+')'



execute(@QUERY)
IN运算符需要一个值列表。您为它提供了一个恰好包含逗号分隔文本的值。对于人类来说,这是一个非常微妙的差别,但对于SQL Server来说,这是一个巨大的差别

像这样的疑问

SELECT * FROM Tab1 WHERE Col1 IN ('A', 'B', 'C')
SELECT * FROM Tab1 WHERE Col1 IN ('''A'', ''B'', ''C''')
将返回col1具有值A、B或C的所有行,而

SELECT * FROM Tab1 WHERE Col1 IN ('A', 'B', 'C')
SELECT * FROM Tab1 WHERE Col1 IN ('''A'', ''B'', ''C''')
将只返回col1的值为'A','B','C'的记录,因此基本上类似于写入

SELECT * FROM Tab1 WHERE Col1 = '''A'', ''B'', ''C'''
您应该直接使用临时表:

SELECT *
FROM Tab1 
WHERE EXISTS
(
    SELECT 1
    FROM #Temp as tmp
    WHERE tmp.Var1 = Tab1.Col1
)
IN运算符需要一个值列表。您为它提供了一个恰好包含逗号分隔文本的值。对于人类来说,这是一个非常微妙的差别,但对于SQL Server来说,这是一个巨大的差别

像这样的疑问

SELECT * FROM Tab1 WHERE Col1 IN ('A', 'B', 'C')
SELECT * FROM Tab1 WHERE Col1 IN ('''A'', ''B'', ''C''')
将返回col1具有值A、B或C的所有行,而

SELECT * FROM Tab1 WHERE Col1 IN ('A', 'B', 'C')
SELECT * FROM Tab1 WHERE Col1 IN ('''A'', ''B'', ''C''')
将只返回col1的值为'A','B','C'的记录,因此基本上类似于写入

SELECT * FROM Tab1 WHERE Col1 = '''A'', ''B'', ''C'''
您应该直接使用临时表:

SELECT *
FROM Tab1 
WHERE EXISTS
(
    SELECT 1
    FROM #Temp as tmp
    WHERE tmp.Var1 = Tab1.Col1
)

您使用的是哪种数据库管理系统?Temp将是一个错误的语法,您需要提供更多信息。至少是这样。请提供您编写的错误信息,如。请复制/粘贴完整信息。还向我们展示temp的外观。列名和数据类型。这是一个输入错误,它的实际温度我正在使用sql server 2014为什么不从表1中选择*从温度中选择变量1中的col1?您使用的是哪种dbms?Temp将是一个错误的语法,您需要提供更多信息。至少是这样。请提供您编写的错误信息,如。请复制/粘贴完整信息。还向我们展示temp的外观。列名和数据类型。这是一个输入错误,它的实际温度我正在使用sql server 2014为什么不直接从表1中选择*从温度中选择变量1中的col1?非常乐意帮助:-非常乐意帮助:-