簡體   English   中英

從存儲過程將數據插入SQL Server

[英]Insert data into SQL Server from stored procedure

我的SQL知識到目前為止,請幫助我解決我的問題:

我有一個生成一些數據的腳本。 我需要將此數據插入到具有以下結構的表中:

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

這是腳本結果:

腳本結果

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

您可以將其添加到腳本的末尾,而不是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

我認為您需要的是:向@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

這是假設該表已經存在。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM