簡體   English   中英

逗號分隔值到SQL IN STATEMENT

[英]Comma seperated values to SQL IN STATEMENT

如果我用逗號分隔值列表:

A1,B2,B3

我如何將其傳遞給變量,然后將其形成為SQL IN語句。

DECLARE @DATE AS VARCHAR(50)

SELECT @DATE = CONVERT(VARCHAR(8), Getdate(), 112)

--PRINT @DATE
DECLARE @TIME AS VARCHAR(50)

--PRINT TIME
SELECT @TIME = Replace(CONVERT(VARCHAR(5), Getdate(), 108), ':', '')

DECLARE @ID AS VARCHAR(50)

SELECT @ID = Replace(W0128001, 32322, 32323, 3232323, 2323232, ',', ',')

--PRINT @ID
DECLARE @QUERY NVARCHAR(MAX);

SET @QUERY = 'SELECT * INTO BACKUPTABLE_' + @DATE + @TIME
             + '
FROM TABLE
WHERE ID IN (' + '''' + @ID + ''')'

--EXEC @query
PRINT @QUERY 

我已經嘗試在上面進行替換,但是我希望這樣做,以便最終用戶可以粘貼到值中,並且我的腳本將處理逗號並正確地將其形成。 它還應從末尾去除最后的逗號。

我的輸出需要閱讀:

SELECT * INTO BACKUPTABLE_201606061503
FROM TABLE
WHERE ID IN ('W0128001','32322','32323','3232323','2323232')

一方面,您不會用單引號引起來:

SET @QUERY = 'SELECT * INTO BACKUPTABLE_' + @DATE + @TIME + '
FROM TABLE
WHERE ID IN (' + @ID + ')';

還有其他將逗號分隔的值傳遞給SQL語句的方法,包括使用split()函數或XML。

CREATE PROCEDURE [dbo].[CreateBackupTable]
    @ID varchar(100) = NULL
AS
BEGIN
    SET NOCOUNT ON;

DECLARE @DATE VARCHAR(50)= CONVERT(VARCHAR(8), Getdate(), 112);
DECLARE @TIME VARCHAR(50) = Replace(CONVERT(VARCHAR(5), Getdate(), 108), ':', '')

    declare @xml xml,@SQL NVARCHAR(MAX);

    set @xml = N'<root><r>' + replace(@ID,',','</r><r>') + '</r></root>'

 SET @SQL = N' SELECT * INTO ' + QUOTENAME('BACKUPTABLE_' + @DATE + @TIME)
         +  N' from TableName '
         +  N' where ID IN (
                            select r.value(''.'',''varchar(max)'') as item
                            from @xml.nodes(''//root/r'') as records(r)
                            )' 

    exec sp_executesql @sql
                    , N'@ID varchar(100), @xml XML'
                    , @ID
                    , @Xml
END

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM