首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL转换问题

SQL转换问题
EN

Stack Overflow用户
提问于 2018-11-08 08:20:46
回答 2查看 70关注 0票数 0

我有一个临时表,在该表中,我要将列的所有值创建为逗号分隔的列表。我面临的问题是,当我输入csv变量时,我得到了ex的错误。

代码语言:javascript
复制
Declare @testvar varchar (max)
Select  @testvar = stuff (( select (','''+ cast(var1 as varchar(1024)+'''')
From # Temp for xmlpath('')),1,2,'') from #Temp

Select * from tab1 where col1 in (@testvar)

这是在查询中附加单引号,我在转换varchar值‘1’、‘2’时遇到错误,比如转换失败。到int

对此有何建议

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-11-08 08:39:50

您似乎喜欢执行动态SQL。确保您的括号都是一致的和正确的。

代码语言:javascript
复制
set @testvar= stuff( 
(select ',''' + cast(var1 as varchar(1024))+ ''''
From #Temp for xml path(''))
,1,1,'') 


Select * from tab1 where col1 in (@testvar)

木琴

这是一个样本

代码语言:javascript
复制
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)
票数 1
EN

Stack Overflow用户

发布于 2018-11-08 09:01:56

IN操作符需要一个值列表。您将为它提供一个包含逗号分隔文本的值。作为一个人,有一个差别似乎非常微妙,但对于Server来说,这是一个巨大的差异。

像这样的查询

代码语言:javascript
复制
SELECT * FROM Tab1 WHERE Col1 IN ('A', 'B', 'C')

将返回col1具有值ABC的所有行,而查询如下

代码语言:javascript
复制
SELECT * FROM Tab1 WHERE Col1 IN ('''A'', ''B'', ''C''')

将只返回col1具有'A', 'B', 'C'值的记录-因此基本上就像编写

代码语言:javascript
复制
SELECT * FROM Tab1 WHERE Col1 = '''A'', ''B'', ''C'''

您应该直接使用临时表:

代码语言:javascript
复制
SELECT *
FROM Tab1 
WHERE EXISTS
(
    SELECT 1
    FROM #Temp as tmp
    WHERE tmp.Var1 = Tab1.Col1
)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53203784

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档