首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL -将变量用于IN子句

SQL -将变量用于IN子句
EN

Stack Overflow用户
提问于 2009-12-23 02:43:09
回答 7查看 7K关注 0票数 3

我希望这样做:

代码语言:javascript
复制
declare @FrameNumber nvarchar(20)
set @FrameNumber = '(p1, p2)'

select from myTable where c1 in @FrameNumber

这方面的正确语法是什么?

(注意:我需要将@FrameNumber的值作为参数传递给存储过程...所以我至少要使用字符串"p1,p2")

我更倾向于并回答说它与SQL7兼容,但SQL2005就足够了。

EN

回答 7

Stack Overflow用户

发布于 2009-12-23 02:45:49

代码语言:javascript
复制
DECLARE @FrameNumbers TABLE (code NVARCHAR(20) PRIMARY KEY)

INSERT
INTO   @framenumbers
VALUES ('p1')

INSERT
INTO   @framenumbers
VALUES ('p2')

SELECT  *
FROM    mytable
WHERE   c1 IN
        (
        SELECT  code
        FROM    @framenumbers
        )
票数 9
EN

Stack Overflow用户

发布于 2009-12-23 02:49:41

代码语言:javascript
复制
CREATE FUNCTION [dbo].[func_ParseStringToTable] (@stringIN varchar(2000)) 
RETURNS @tOUT TABLE(RoomID int) AS
BEGIN
DECLARE @pos int
SET @pos=CHARINDEX(',',@StringIN)
WHILE @pos>0
     BEGIN
     INSERT @tOUT(RoomID) SELECT LEFT(@StringIN,CHARINDEX(',',@StringIN)-1)
     SET @stringIN = SUBSTRING(@StringIN,CHARINDEX(',',@StringIN)+1,LEN(@StringIN))
     SET @pos=CHARINDEX(',',@StringIN)
     END
IF LEN(@StringIN)>0
     BEGIN
     INSERT @tOUT(RoomID) SELECT @StringIN
     END
RETURN 
END

用法...

代码语言:javascript
复制
SELECT * FROM table WHERE id IN (func_ParseStringToTable(@ids))
票数 2
EN

Stack Overflow用户

发布于 2009-12-23 02:58:09

您可以将这些值加载到表变量中,也可以使用动态sql。以下是每种方法的示例:

表变量

代码语言:javascript
复制
DECLARE @FrameNumbers TABLE (
    Frame NVARCHAR(20)
)

INSERT INTO @FrameNumbers (
    Frame
)
SELECT 'p1'
UNION ALL SELECT 'p2'

选项1:

代码语言:javascript
复制
SELECT * FROM myTable WHERE c1 in (
    SELECT Frame
    FROM @FrameNumbers
)

选项2:

代码语言:javascript
复制
SELECT
    m.*
FROM myTable m
INNER JOIN @FrameNumbers f ON f.Frame = m.c1

所有这些都很好,但这是我最喜欢的:

动态SQL

代码语言:javascript
复制
DECLARE 
@FrameNumber nvarchar(20),
@sql nvarchar(max),
@ParamDef nvarchar(1000)

SET @FrameNumber = '(p1, p2)'

SET @sql = N'SELECT FROM myTable WHERE c1 IN ' + @FrameNumber

EXECUTE dbo.sp_ExecuteSQL @sql
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1948351

复制
相关文章

相似问题

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