2014-11-05 60 views
0

如果我想傳遞ID列表/字符串,例如,我應該如何在StoredProc中定義我的數據類型。 (1,2,5,12,99)?StoredProc數據類型的Id列表

create PROCEDURE [dbo].[TABLE_Delete] 
    -- Add the parameters for the stored procedure here 
    @TId datatype = null 
AS 
BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 

    -- Insert statements for procedure here 
    delete from dbo.TABLE T where T.Id in (@TId) 

END 

我的TID字段的類型是詮釋

+0

你叫什麼來自? – 2014-11-05 16:02:23

+0

對於Java應用程序 – 2014-11-06 05:31:15

回答

0

您需要將您的數據作爲nvarchar(xx)例如爲「1,2,3,4」 然後使用分割功能分割它們,並寫入您的查詢作爲

delete from dbo.TABLE T where T.Id in (dbo.split(@param,',')) 

這裏是斯普利特函數的代碼

CREATE FUNCTION Split 
(
    @delimited nvarchar(max), 
    @delimiter nvarchar(100) 
) RETURNS @t TABLE 
(
-- Id column can be commented out, not required for sql splitting string 
    id int identity(1,1), -- I use this column for numbering splitted parts 
    val nvarchar(max) 
) 
AS 
BEGIN 
    declare @xml xml 
    set @xml = N'<root><r>' + replace(@delimited,@delimiter,'</r><r>') + '</r></root>' 

    insert into @t(val) 
    select 
    r.value('.','varchar(max)') as item 
    from @xml.nodes('//root/r') as records(r) 

    RETURN 
END 
GO 
+0

,我很抱歉地說我沒有遵循你在這裏寫的內容。 :( – 2014-11-06 12:29:50

0

另一種拆分方式

CREATE FUNCTION [dbo].[fnSplitString] 
( 
    @string NVARCHAR(MAX), 
    @delimiter CHAR(1) 
) 
RETURNS @output TABLE(splitdata NVARCHAR(MAX) 
) 
BEGIN 
    DECLARE @start INT, @end INT 
    SELECT @start = 1, @end = CHARINDEX(@delimiter, @string) 
    WHILE @start < LEN(@string) + 1 BEGIN 
     IF @end = 0 
      SET @end = LEN(@string) + 1 

     INSERT INTO @output (splitdata) 
     VALUES(SUBSTRING(@string, @start, @end - @start)) 
     SET @start = @end + 1 
     SET @end = CHARINDEX(@delimiter, @string, @start) 

    END 
    RETURN 
END