表:我們如何爲兩個動態SQL語句使用EXEC sp_executesql?
create table TabA
(ID int, Name varchar(20))
insert into TabA
select 1,'ABC' union
select 2,'DEF' union
select 3,'GHD'
create table TabB
(ID int, Name varchar(20))
insert into TabA
select 1,'XYZ' union
select 2,'STF' union
select 3,'LDZ'
create table status
(Result1 int,Result2 int)
Create table query(query1 varchar(1000),query2 varchar(1000))
Insert into query(query1,query2)
select '''select COUNT(*) from TabA''','''select COUNT(*)from TabB'''
select * from query
程序:
create Procedure [dbo].spStatus
AS
BEGIN
SET NOCOUNT ON;
Declare @sqlString1 nvarchar(1000)
,@sqlString2 nvarchar(1000)
,@col_value1 varchar(256)
,@col_value2 varchar(256)
select @sqlString1 = query1
, @sqlString2 =query2
from Query
EXEC sp_executesql
@[email protected], --sql string is your full select statement
@params = N'@col_Value1 varchar(256) OUTPUT',
@col_Value1 = @col_Value1 OUTPUT
print(@sqlString1)
-- @sqlString2, --sql string is your full select statement
[email protected] = N'@col_Value2 varchar(256) OUTPUT',
-- @col_Value2 = @col_Value2 OUTPUT
Insert Into dbo.Status(Result1,Result2)
Values(@col_Value1,@col_Value2)
End
它的工作原理,如果我們只用@[email protected]
,但我想這兩個聲明@[email protected],@[email protected]
應該一起執行。
請幫助我們如何使用這兩個語句來執行?
由於提前
如果'@ sqlString1 +';'你可能會遇到問題' + @ sqlString2'太長,無法完全駐留在'@ sqlString1'中。另外,如果'@ sqlString1'或'@ sqlString2'爲'NULL',那麼整個連接結果將是'NULL',並且不會運行sql。 –
雖然的確如此,但我只是提供了基本的方法。雖然我們正在分離對方的答案,但應該將變量聲明更改爲「NVARCHAR(MAX)」,以避免消息214。 –