Chr*_*isA 1 t-sql sql-server syntax
他们为什么从不让我们这样做:
Create Proc RunParameterisedSelect
@tableName   varchar(100),
@columnName  varchar(100),
@value       varchar(100)
as
select * from @tableName
where @columnName = @value
@value显然,您可以将其用作参数,并且可以使用动态SQL实现整个过程,但创建它总是一件痛苦的事.  
那么他们为什么不以某种方式将它作为语言的一部分,而不是强迫你EXEC(@sql)呢?
很简单,因为这样的事情是不可能的.这有点像问"为什么这个JavaScript语法永远不会实现":
var operator  = "<";
var statement = "if"
var op1       = 4
statement (op1 operator 5) op1++;  // whatever
它从未被实现,因为这是不可实现的,坦率地说,它没有任何意义.JavaScript具有eval()动态代码:
code = statement+" (op1 "+operator+" 5) op1++;";
eval( code );
SQL Server具有EXECUTE动态SQL:
/* example only, it is not recommendable to actually *do* this */
Create Proc RunParameterisedSelect
  @tableName   varchar(100),
  @columnName  varchar(100),
  @value       varchar(100)
as
begin 
  declare @code varchar(8000)
  set @code = 'select * from ['+@tableName+'] where ['+@columnName+'] = '+@value
  exec (@code)
end
本质是相同的 - 如果它不是一个固定的,不可变的代码结构(并且表或列名是SQL中的代码,而不是变量),那么你必须先将字符串输出并解析它.解释器/编译器必须构建一个新的语法树(当然,它本身将再次修复).