请原谅我,我是一名移植到sql世界的开发人员.我以为我可以通过添加变量来改进一些sql,但它没有像我预期的那样运行.有人能告诉我为什么这不起作用?我不想要一个解决方法,我想知道为什么这不起作用的原因我想象它应该因为我确信有一个很好的理由,但目前它并没有跳出来.
DECLARE @DatabaseName varchar(150) SET @DatabaseName = 'MyAmazingDatabaseName' CREATE DATABASE @DatabaseName GO USE @DatabaseName GO
解决方法
根据
variables的书籍在线页面
Variables can be used only in expressions,not in place of object
names or keywords. To construct dynamic sql statements,use EXECUTE.
例如,如果您在where子句中使用了变量,它将以您期望的方式工作.至于为什么,我认为它与解析器无法评估变量并因此检查存在有关.执行时,首先解析查询的语法和对象,然后,如果解析成功,查询将执行该变量的设置.
DECLARE @name varchar(20); SET @name = 'test'; CREATE TABLE [#tmp]([val] varchar(10)); insert into #tmp values('test') SELECT * FROM [#tmp] WHERE [val] = @name;