表:我们如何为两个动态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。 –