2014-12-02 104 views
-1

這裏我想將每個值的完整字符串插入到列中。爲此我寫了下面的腳本:將字符串的每個值插入到單個列中

:測試

create table test 
(
cola varchar(10), 
colb varchar(max), 
colc varchar(10) 
); 

注意:現在我想通過調用存儲過程來插入類似下面的記錄:

cola colb colc 
------------------ 
X1  M1  Z1 
X1  M2  Z1 
X1  M3  Z1 
X1  M4  Z1 

存儲過程:sptest

CREATE PROC sptest 
@cola varchar(10), 
@colb varchar(max), 
@colc varchar(10) 

AS 

Declare @dynamic varchar(max) 

    SET @dynamic =N'delete from test where colc='''+ @colc +''''; 
    PRINT(@dynamic) 
    EXEC(@dynamic) 

    SET @dynamic =N'insert into test values('''[email protected]+''','''[email protected]+''','''[email protected]+''')'; 
    PRINT(@dynamic) 
    EXEC(@dynamic) 

GO 

注意:首先,我需要通過檢查與colc值刪除記錄,之後插入記錄。

調用功能

EXEC sptest 
@cola = 'X1', 
@colb = 'M1,M2,M3,M4', 
@colc = 'Z1' 

:在調用函數如上圖所示在上表中的值colb必須插入。我沒有得到如何在column colb中插入每個值的完整字符串。

+0

問題沒有多大意義..... – 2014-12-02 13:18:23

+0

@MitchWheat,請檢查更新。 – MAK 2014-12-02 13:19:10

+0

你爲什麼用這個動態?根據您發佈的內容,根本不需要動態sql。這不僅是沒有必要的,而且它打開了你的程序易受sql注入攻擊。您還應始終在插入語句中爲您的列命名。 – 2014-12-02 14:35:08

回答

1

SQL沒有任何機制來自動分裂逗號分隔值的字符串(您@colb -variable到多個刀片。你需要編寫一些代碼來自己做這種分裂。

基本上,你應該做這樣的事情:

  1. 在while循環,使用CHARINDEX確定@colb下一個,的位置存儲在一個變量這個位置
  2. 使用SUBSTRING重。只處理從@colb到(1)中存儲的位置的字符。
  3. 撥打INSERT@cola,@colc和您在(2)中提取的值。
  4. 重複,直到在@colc中找不到,
相關問題