用 sp_executesql 解决字段名、表名不能用变量的问题

作者:leen 来源:ITPOW(原创) 日期:2006-6-13

在 T-SQL 应用中,有时我们无法立即确定字段名或表名,我们希望字段名或表名能像变量一样自由变换,如:
declare @fld varchar(255)
select @fld = 'userName'
select @fld from tbl

上述代码试图用 @fld 变量代替字段名 userName,但在实际使用中却会换错,同样在表名也无法直接用变量,要解决此问题,我们可以用存储过程:sp_executesql,该存储过程可以只接一个参数,即 SQL 语句字符串。如:exec sp_executesql @statement,注意:@statement 参数只能是 ntext/nchar/nvarchar 类型。

示例:
declare @fld nvarchar(255)
declare @sql nvarchar(255)
select @fld = 'userName'
select @sql = 'select ' + @fld + ' from tbl'
exec sp_executesql @sql

相关文章