2016-05-04 22 views
-1

我有一個表import_saved_format_det的未知數目(稱爲A)的結構如下:插入值

row_id | hdr_id | column_name 
1  | 1  | supplier_name 
2  | 1  | branch_name 
3  | 2  | supplier_name 
4  | 2  | branch_name 
5  | 2  | barcode 

列名的數目爲給定hdr_id是未知的,但總是5或更少。

我有另一個表稱爲traxs_temp ..__ SimpleImport_ColumnNames(稱之爲B)的結構如下:

row_id | session_id | field1 | field2 | field3 | field4 | field5 

與FIELD1到字段5可爲空的。

在存儲過程中我想從插入列名的一個給定hdr_id在表B.我的問題是,我不知道有多少列名必須插入提前。

這裏是我做的,到目前爲止

DECLARE @hdr_id int = 1 
DECLARE @session_id varchar(30) = 'test' 

DECLARE @list varchar(max) = '' 
SELECT @list = @list + '[' + column_name + '],' FROM import_saved_format_det WHERE hdr_id = @hdr_id 
SELECT @list = REVERSE(STUFF(REVERSE(@list), 1, 1, '')) 

DECLARE @sql NVARCHAR(MAX) 
SET @sql = 'INSERT INTO traxs_temp..__SimpleImport_ColumnNames 
       (session_id, 
       field1, 
       field2, 
       field3, 
       field4, 
       field5) 
      SELECT 
       @session_id, 
       * 
      FROM 
       (
        SELECT column_name FROM import_saved_format_det WHERE hdr_id = @hdr_id 
       ) src PIVOT (MAX(column_name) FOR column_name IN (' + @list + ')) piv;' 

EXEC SP_EXECUTESQL @sql, N'@hdr_id int, @session_id varchar(30)', @hdr_id, @session_id 

但是我卻越來越INSERT語句的選擇列表包含多於插入列表中的項目少。

有沒有辦法將剩餘的字段設置爲空?或者我覺得這個錯誤?

+0

我不明白的人downvoting無需編寫評論。這裏值得讚揚的是什麼? –

回答

0

感謝Joe C的回答,我發現了一種做我想做的事情的方式。在構建我的PIVOT列表以添加儘可能多的假人時,我添加了幾行。

DECLARE @list varchar(max) = '' 
SELECT @list = @list + '[' + column_name + '],' FROM import_saved_format_det WHERE hdr_id = @hdr_id 
SELECT @fields_count = LEN(@list) - LEN(REPLACE(@list, ',', '')) 
SELECT @list = @list + '[dummy' + CONVERT(varchar, range.x) + '],' FROM (VALUES(1),(2),(3),(4),(5)) range(x) WHERE range.x BETWEEN @fields_count + 1 AND 5 
SELECT @list = REVERSE(STUFF(REVERSE(@list), 1, 1, '')) 

所以對於hdr_id = 2我得到[supplier_name],[branch_name],[條碼],[dummy4],[dummy5]

1

我只有能夠做到這一點,如果我有一個主鍵與身份。我可以省略列名並執行類似於Insert Table1的操作。選擇a,b,c從Table2中,Table1的第四列是主鍵(Identity)。

我建議在構建@list時,確定您有多少列,併爲其餘列填入虛擬值。例如,對於字符字段,你可以用'',''來表示...

+0

感謝最後一段,它幫助我找到了解決辦法。 –

+0

我很高興我可以幫忙,這個網站已經幫了我很多次。 –