2014-12-20 70 views
0

我是sql的初學者。 我想從我的表中刪除幾行(一對一)。我認爲最好的方法是使用數組。 我想傳遞Id的行(類型爲int)來存儲數組的過程。我搜索並找到幾種方法。但是還沒有找到我的魅力。 我感謝任何指導我的人。 :)如何將數組傳遞給sql?

+0

你正在使用哪些DBMS? Postgres的?甲骨文? –

回答

0

這會幫助你。 :)按照下面的步驟,

  1. 打開查詢設計
  2. 複製,因爲它是將以下代碼粘貼,它會創建其轉換成字符串函數來INT

    CREATE FUNCTION dbo.SplitInts ( @list VARCHAR(MAX), @Delimiter VARCHAR(255) ) RETURNS TABLE AS RETURN(SELECT項目= CONVERT(INT,檔案)FROM (選擇信息= xivalue('(./文本(SELECT)[XML] = CONVERT(XML,'' + REPLACE(@List,@Delimiter,'')+'')(「SELECT [XML] = CONVERT(')'[1]','varchar(max)') .query('。') )作爲CROSS APPLY [XML] .nodes('i')AS x(i))AS y WHERE Item IS NOT NULL ); GO

  3. 創建以下存儲過程

    CREATE PROCEDURE dbo.sp_DeleteMultipleId 
    @List VARCHAR(MAX) 
    AS 
    BEGIN 
         SET NOCOUNT ON; 
         DELETE FROM TableName WHERE Id IN(SELECT Id = Item FROM dbo.SplitInts(@List, ',')); 
    END 
    GO 
    
  4. 執行此SP使用exec sp_DeleteId '1,2,3,12'這是標識的一串要刪除,

  5. 您轉換您的陣列到字符串在C#並將其作爲存儲過程參數傳遞

int [] in tarray = {1,2,3,4,5};
string [] result = intarray.Select(x => x.ToString())。ToArray();

SqlCommand command = new SqlCommand(); 
    command.Connection = connection; 
    command.CommandText = "sp_DeleteMultipleId"; 
    command.CommandType = CommandType.StoredProcedure; 
    command.Parameters.Add("@Id",SqlDbType.VARCHAR).Value=result ; 

這將刪除多行,所有最好的

+0

在你的解決方案如何傳遞數組來存儲procedure.my id是int類型。我之前看到過這個鏈接。但我還有問題。 –

+0

你想從Code Behind傳遞數組到存儲過程嗎? –

+0

沒錯。如何將這些傳遞給SP? –

0

如果你的ID的數組從1開始和結束以10可以使用下面的代碼在存儲過程

如果你的ID的數組從1開始和結束以10可以使用下面的代碼店內程序

AS 
BEGIN 
    DECLARE @Count NUMERIC(18,0) 
    SET @Count = 1 
     WHILE(@Count <= 10) 
     BEGIN 
      DELETE FROM TableName WHERE [email protected] 
      SET @[email protected]+1 
     END 
    END  
END 
+0

不,任何時候ID都是不同的值! –