2014-10-07 83 views
0

您可以給我一些指示(或指向正確的方向上谷歌什麼搜索條件)?在存儲過程中,我有一個參數@TAG(字符串)。我從另一個不能更改的應用程序收到'(14038314,14040071)'(例如)。在存儲過程中,我需要拆分'(14038314,14040071)'以在每個字符串值周圍加上引號,重新構建它,刪除外部引號,去掉這些parens並將它傳遞給@TAG,以便查詢它看起來像下面註釋的線?SQL Server 2012 - 操縱存儲過程的字符串數據

SELECT 
    V.NAME AS VARIETY, TAGID 
FROM 
    mfinv.dbo.onhand h 
INNER JOIN 
    mfinv.dbo.onhand_tags t on h.onhand_id = t.onhand_id 
INNER JOIN 
    mfinv.dbo.onhand_tag_details d on t.onhand_tag_id = d.onhand_tag_id 
INNER JOIN 
    mfinv.dbo.FM_IC_PS_VARIETY V ON V.VARIETYIDX = d.VARIETYIDX 
LEFT JOIN 
    mfinv.dbo.FM_IC_TAG TG ON TG.TAGIDX = t.TAGIDX 
WHERE 
    h.onhand_id = (SELECT onhand_id FROM mfinv.dbo.onhand 
        WHERE onhand_id = IDENT_CURRENT('mfinv.dbo.onhand')) 
    AND TG.ID IN (@TAG) 
    --AND TG.ID IN ('14038314','14040071') 
+2

http://sqlperformance.com/2012/07/t-sql-queries/拆分字符串 – 2014-10-07 19:35:32

+0

@salmon我已發佈的答案你可以試試嗎? – 2014-10-07 19:43:35

+0

@Ganesh_Devlekar我正在努力使其工作。 – 2014-10-07 21:29:04

回答

0

這裏就是我所做的。謝謝大家的迴應。感謝dasblinkenlight回答「如何替換sql server中列的第一個和最後一個字符?」。感謝SQLMenace回答「如何在不創建函數的情況下在SQL Server中拆分分隔字符串?」。

這裏是我如何去掉括號:

@Tag nvarchar(256) 
SET @Tag = SUBSTRING(@Tag, 2, LEN(@Tag)-2) 

下面是如何分裂和重建@Tag:

AND TG.ID in 
(

SELECT SUBSTRING(',' + @Tag + ',', Number + 1, 
    CHARINDEX(',', ',' + @Tag + ',', Number + 1) - Number -1)AS VALUE 
    FROM master..spt_values 
    WHERE Type = 'P' 
    AND Number <= LEN(',' + @Tag + ',') - 1 
    AND SUBSTRING(',' + @Tag + ',', Number, 1) = ',' 
) 
0

您可以使用動態SQL像這樣

DECLARE @TAG Nvarchar(MAX)='14038314,14040071' 
set @TAG=''''+REPLACE(@TAG,',',''',''')+'''' 
--select @TAG 

DECLARE @SQL NVARCHAR(MAX)=N' 
Select V.NAME AS VARIETY, TAGID 
FROM mfinv.dbo.onhand h 
INNER JOIN mfinv.dbo.onhand_tags t on h.onhand_id = t.onhand_id 
INNER JOIN mfinv.dbo.onhand_tag_details d on t.onhand_tag_id = d.onhand_tag_id 
INNER JOIN mfinv.dbo.FM_IC_PS_VARIETY V ON V.VARIETYIDX = d.VARIETYIDX 
LEFT JOIN mfinv.dbo.FM_IC_TAG TG ON TG.TAGIDX = t.TAGIDX 
WHERE h.onhand_id = (SELECT onhand_id FROM mfinv.dbo.onhand 
WHERE onhand_id = IDENT_CURRENT (''mfinv.dbo.onhand'')) 
AND TG.ID IN ('[email protected]+')' 

PRINT @SQL 
EXEC (@SQL) 
+0

這很容易發生sql注入。這種方法根本不是一個好方法。 – 2014-10-07 20:20:08