【发布时间】:2014-11-25 22:16:35
【问题描述】:
假设我们有以下声明:
declare @a int;
set @a = 1;
并且需要生成一些信息性消息,例如:
select 'the value of @a is ' + @a;
上面的语句会产生错误,因为需要类型转换,正确的做法是:
select 'the value of @a is ' + convert(varchar(10), @a);
那么,如果同样的事情需要动态完成,人们可能会认为以下应该是正确的:
exec('select ''the value of @a is ' + convert(varchar(10), @a) + '''');
令人惊讶的是它不是,并且会产生语法错误。与select 声明相反,在这种情况下正确的做法是:
exec('select ''the value of @a is ' + @a + '''');
那么问题来了,为什么select语句需要类型转换,而exec(string)语句却是非法的?
【问题讨论】:
标签: sql-server tsql type-conversion implicit-conversion