[英]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.