2013-05-05 52 views
1

我在SQL方面的知識還沒有到目前爲止,請幫我解決我的問題:從存儲過程插入數據到SQL Server

我有一個生成一些數據的腳本。我需要這個數據插入到表結構如下:

Variable_Sample (idsample, idvariable, value), idsample and idvariable - PK. 

下面是腳本:

Declare params cursor for 
Select distinct id_variable from [UIR_DB].[dbo].[Variable_Values] 
open params 
Declare @idparam int 
Declare @csql nvarchar(max) = '' 
Declare @csql2 nvarchar(max) = '' 
Declare @i int = 1 
fetch next from params into @idparam 
while @@FETCH_STATUS = 0 
begin 
Select @csql2 = @csql2 + ', param' +LTrim(Str(@i)) 
Select @csql = @csql + ' (Select value as param'+LTrim(Str(@i))+' from [UIR_DB].[dbo].[Variable_Values] where id_variable = '+LTrim(Str(@idparam))+') a'+LTrim(Str(@i))+' cross join' 
Set @i = @i+1 
fetch next from params into @idparam 
end 
Select @csql = ' 
SELECT id, CAST(SubString(Param,6,LEN(Param)-5) as int) param_id, param_val 
FROM 
(Select ROW_Number() over(order by '+SubString(@csql2,2,LEN(@csql2)-1)+') id, '+SubString(@csql2,2,LEN(@csql2)-1)+' from '+SubString(@csql,1,LEN(@csql)-11) + ') p 
UNPIVOT 
    (param_val FOR Param IN 
     ('+SubString(@csql2,2,LEN(@csql2)-1)+') 
)AS unpvt 
' 

print @csql 
exec sp_executesql @csql 
close params 
deallocate params 

下面是腳本的結果:

Script result

所以我需要把腳本結果放入表Variable_Sample(idsample, idvariable, value),其中(idsample, idvariable)是表的主鍵。

回答

1

我認爲,所有你需要的是: 添加刀片,@csql

例如

Insert into variable_sample(idsample, idvariable, value) 
SELECT id, CAST(SubString(Param,6,LEN(Param)-5) as int) param_id, param_val 
FROM 
(Select ROW_Number() over(order by '+SubString(@csql2,2,LEN(@csql2)-1)+') id, '+SubString(@csql2,2,LEN(@csql2)-1)+' from '+SubString(@csql,1,LEN(@csql)-11) + ') p 
UNPIVOT 
    (param_val FOR Param IN 
     ('+SubString(@csql2,2,LEN(@csql2)-1)+') 
)AS unpvt 

這是假設表已存在。

2

您可以添加此到腳本的末尾,而不是EXEC sp_executesql @csql

CREATE TABLE #temptable (idsample INT, idvariable INT, value INT) 
INSERT INTO #temptable EXEC @csql 

SELECT idsample, idvariable, value FROM #temptable 

DROP TABLE #temptable 
+0

是啊,非常感謝! – 2013-05-05 21:34:52

+0

偉大的我可以幫助,upvote如果它是有用的,所以其他用戶也可以檢查出來,當尋找另一種選擇。 – Yaroslav 2013-05-05 21:47:09

相關問題