日期:2014-05-18  浏览次数:20602 次

求救:动态执行SQL的问题
表名动态变化
其中有一段流程是这样的:
1、在表中根据某个条件先判断记录是否存在
2、若存在再继续……

比如
declare   @table   varchar(20)
declare   @sql   varchar(200)
set   @table= 'test1 '
set   @sql= 'select   *   from   '+@table+ '   where   条件表达式 '
如果是正常情况可以用:
if   exists(select   *   from   table   where   条件表达式)
来判断记录是否存在
可是现在要执行这个动态语句,并判断是否有记录存在,该如何写呢?
因为   if   exests(exec(@sql))   是行不通的
求大侠指教
小弟刚刚接触TSQL编程



------解决方案--------------------
把if exists也放到@sql裏面就可以了
------解决方案--------------------
try

declare @table varchar(20)
declare @sql Nvarchar(200), @rowscount int
set @table= 'test1 '
set @sql= 'select @rowscount = Count(*) from '+@table+ ' where 条件表达式 '
EXEC sp_executesql @sql, N '@rowscount int Output ',@rowscount Output
IF(@rowscount > 0)
...
------解决方案--------------------
可以一起动态

declare @table varchar(20)
--declare @sql varchar(200) 不要变量
set @table= 'test1 '
exec( '
if exists(select * from '+@table+ ' where 条件表达式)
begin
update '+@table+ ' set ... where 条件表达式
end
else
insert '+@table+ ' ...
')