执行动态SQL语句

首先定义变量 @Games 为运动会名称,
为动态SQL语句定义变量
然后建立动态的SQL语句
最后运行这个动态的SQL语句 EXEC (@SQL2) 或 Exec SP_ExecuteSQL @SQL2

-- 执行动态SQL语句示例,复制后可直接运行,运行过程中执行SQL3的语句会出错
DECLARE @Games VARCHAR(20)
DECLARE @NUM   SMALLINT
DECLARE @STR   NVARCHAR(4000)
DECLARE @SQL1  NVARCHAR(4000)    -- 第1种数据类型
DECLARE @SQL2  NVARCHAR(4000)    -- 第1种数据类型
DECLARE @SQL3  VARCHAR(4000)     -- 第2种数据类型

SELECT @Games = Games FROM (SELECT '市全运会' Games) A

-- 设置相同的SQL语句
SET @STR = 'WITH Team (Games,GroupType,SEX,Team) AS ('
SET @STR = @STR + ' SELECT ''市全运会'',''高中组'',''男'',''100米'' UNION ALL'
SET @STR = @STR + ' SELECT ''市全运会'',''高中组'',''女'',''100米'' UNION ALL'
SET @STR = @STR + ' SELECT ''市全运会'',''初中组'',''男'',''100米'' UNION ALL'
SET @STR = @STR + ' SELECT ''市全运会'',''初中组'',''女'',''100米'' )'

SET @SQL1 = @STR + ' SELECT @A=COUNT(*) FROM Team WHERE SEX = ''女'''
SET @SQL2 = @STR + ' SELECT Games,GroupType,SEX,Team FROM Team WHERE Games = ''' + @Games + ''''
SET @SQL3 = @SQL2

EXEC (@SQL2)    -- 执行动态SQL成功
EXEC (@SQL3)    -- 执行动态SQL成功

Exec SP_ExecuteSQL @SQL2     -- 执行动态SQL成功
Exec SP_ExecuteSQL @SQL3     -- 执行动态SQL出错 显示错误信息为:需要类型为 'ntext/nchar/nvarchar' 的参数

Exec SP_ExecuteSQL @SQL1,N'@A INT Output',@num Output  -- 成功将动态SQL语句的运行结果保存在变量@NUM中
SELECT @NUM

更多推荐

SQLServer 执行动态SQL语句