首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何替换sql中的常量5、6和8,而不是在条件下

如何替换sql中的常量5、6和8,而不是在条件下
EN

Database Administration用户
提问于 2013-10-28 01:05:39
回答 2查看 102关注 0票数 0

在下面的查询中,我希望使IN中的值是动态的。

代码语言:javascript
复制
SELECT DISTINCT party_id 
INTO #tmp_new_part
FROM #party_approval
WHERE party_approval_type_id in (5,6,8)
EN

回答 2

Database Administration用户

发布于 2013-10-28 06:18:03

这取决于您想要进入in列表中的值是来自现有表还是来自SQL参数。如果它们来自现有的表或查询,您可以这样做:

代码语言:javascript
复制
SELECT DISTINCT party_id 
INTO #tmp_new_part
FROM #party_approval
WHERE party_approval_type_id in (select party_approval_type_id from some_table)

如果希望它基于存储过程的参数,可以传递包含分隔值列表的varchar,并使用现有的UDF之一将其拆分为表变量,如下所示:

代码语言:javascript
复制
SELECT DISTINCT party_id 
INTO #tmp_new_part
FROM #party_approval
WHERE party_approval_type_id in (select * from dbo.CsvToInt(@values))
票数 1
EN

Database Administration用户

发布于 2013-10-28 08:35:13

可以使用XML文档作为参数。这是一个技巧,当一个人需要传递一个不同的值数组到一个存储过程。来自堆栈溢出的一个例子很好地说明了这种技术:

代码语言:javascript
复制
declare @xmlDoc XML
set @xmlDoc = '
<ids>
  <id>1</id>
  <id>2</id>
</ids>'

declare @handle int

exec sp_xml_preparedocument @handle output, @XMLDoc

select * from MyTable where id in (
    select id from openxml( @handle, '/ids/id') with (id int '.')
)
票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/52298

复制
相关文章

相似问题

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