SQL转换问题
我有一个临时表,我在其中创建一个逗号分隔列表中列的所有值。。我面临的问题是,当我输入csv变量时,我会出错 前 这是在查询中添加单引号,我得到的错误如下 转换varchar值1','2'…时转换失败。。。。。。。。整型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
对此有什么建议吗?您似乎喜欢使用动态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?非常乐意帮助:-非常乐意帮助:-