原文地址为:
SQL server 动态SQL对变量讲行赋值
declare
@t
int
exec
(
'set
@t=1
'
)
print
(
@t
)
declare
@t
int
set
@t
=
1
print
(
@t
)
exec
(
'
declare @t int;
set @t=1;
print(@t)
'
)
declare
@sql2
nvarchar
(
500
)
set
@sql2
=
'
select @COUNT = count(distinct(
'
+
@groupby
+
'
)) from TG_ENTRY where
'
+
@sqlWhere
execute
sp_executesql
@sql2
,
N
'
@COUNT int output
'
,
@TOTAL_COUNT
output
转载请注明本文地址: SQL server 动态SQL对变量讲行赋值
执行如下SQL
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
报如下错误!
服务器: 消息 137,级别 15,状态 2,行 1
必须声明变量 '@t'。
实际就是变量与动态语句不能共享,
那么换成这样就行,
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
或
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
但是有时候你一定要,变量与动态SQL结合起来。
比如,你在存储过程中定义一个输出参数,◎COUNT int output
而你在获得这个值的最好的方法就是动态SQL,那么有什么好的方式吗?
那就要用到系统存储过程,sp_executesql
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
转载请注明本文地址: SQL server 动态SQL对变量讲行赋值