declare @str varchar(2),@str1 varchar(100)
set @str='B'
exec('set '+@str1+'='+@str)
执行显示:服务器: 消息 170,级别 15,状态 1,行 1
第 1 行: '=' 附近有语法错误。我知道第三句用set @str1=@str肯定没问题,但这样用不行吗?
set @str='B'
exec('set '+@str1+'='+@str)
执行显示:服务器: 消息 170,级别 15,状态 1,行 1
第 1 行: '=' 附近有语法错误。我知道第三句用set @str1=@str肯定没问题,但这样用不行吗?
set @str='B'
print 'set '+@str1+'='+@str--查看一下结果就知道了
/******************************************************************************************************************************************************
动态语句语法:exec\sp_executesql语法整理人:中国风(Roy)日期:2008.06.06
******************************************************************************************************************************************************/
动态语句语法:--方法1查询表改为动态
select * from sysobjects
exec('select ID,Name from sysobjects')
exec sp_executesql N'select ID,Name from sysobjects'--多了一个N为unicode--方法2:字段名,表名,数据库名之类作为变量时,用动态SQL
declare @FName varchar(20)
set @FName='ID'
exec('select '+@FName+' from sysobjects where '+@FName+'=5' )
declare @s varchar(1000)
set @s=N'select '+@FName+' from sysobjects where '+@FName+'=5'
exec sp_executesql @s--会报错
declare @s nvarchar(1000)--改为nvarchar
set @s=N'select '+@FName+' from sysobjects where '+@FName+'=5'
exec sp_executesql @s--成功
--方法3:输入参数declare @i int,@s nvarchar(1000)
set @i=5
exec('select ID,Name from sysobjects where ID='+@i)set @s='select ID,Name from sysobjects where ID=@i'
exec sp_executesql @s,N'@i int',@i--此处输入参数要加上N--方法4:输出参数declare @i int,@s nvarchar(1000)
set @s='select @i=count(1) from sysobjects'--用exec
exec('declare @i int '+@s+' select @i')--把整个语句用字符串加起来执行--用sp_executesql
exec sp_executesql @s,N'@i int output',@i output--此处输出参数要加上N
select @i
--方法5:输入输出--用sp_executesql
declare @i int,@con int,@s nvarchar(1000)
set @i=5
select @s='select @con=count(1) from sysobjects where ID>@i'
exec sp_executesql @s,N'@con int output,@i int',@con output ,@i
select @con--用exec
declare @i int,@s nvarchar(1000)
set @i=5
select @s='declare @con int select @con=count(1) from sysobjects where ID>'+rtrim(@i)+' select @con'
exec(@s)
declare @str varchar(2),@str1 varchar(100)
set @str='B'
print 'set '+@str1+'='+@str--查看一下结果就知道了
以下代码,测试运行无误
declare @str varchar(2),@sqlstr varchar(1000)
set @str='B'
set @sqlstr='declare @str1 varchar(2); set @str1='''+@str+''';select @str1 as aaa'
exec(@sqlstr)
set @str='B'
set @str1='' --这儿要填入值
set @str = 'set '+@str1+'='+@str
exec(@str )
set @str='B'
set @SQL='set '+@str1+ '=' +@str
exec(@SQL)
declare @str varchar(2),@str1 varchar(100)
set @str='B'
exec('set '+@str1+'='''+@str'''')
set @str='B'
set @str1='@str1'
set @sql='set '+@str1+'='''+@str+''''
或直接
declare @str varchar(2) ,@sql varchar(8000)
set @str='B'
set @sql='set @str1='''+@str+''''print(@sql)
set @str='B'
set @s='set @str1 = '''+@str+''''
exec sp_executesql @s,N'@str1 varchar(100) output',@str1 output
select @str1--执行结果
-----------
B