sql - 更新一个变量的动态sql语句

标签 sql sql-server sql-server-2005

我的sql语句是这样的

DECLARE @OLD_NAV_VALUE AS INT
DECLARE @FINAL AS INT

SELECT @OLD_NAV_VALUE = [col1] from TBL_BA where DATE = @id_Date

SET @FINAL =  @OLD_NAV_VALUE * 50

但我在这里遇到的问题是,作为 [col1] 给出的 select 语句中的列名是一个动态值。所以我正在尝试下面这样的事情。

DECLARE @OLD_NAV_VALUE AS INT
DECLARE @FINAL AS INT

EXEC('SELECT @OLD_NAV_VALUE = [' + @DYNAMIC_COL_NAME + '] from TBL_BA where DATE = ' + @id_Date)

SET @FINAL =  @OLD_NAV_VALUE * 50

这给出了必须声明@OLD_NAV_VALUE 的错误。所以我尝试在 EXEC 语句中声明@OLD_NAV_VALUE。但如果我这样做,我将无法在 EXEC 语句之外使用相同的语句。

请告诉我该怎么做。

最佳答案

您还可以使用带输出参数的sp_executesql语句:

declare @field nvarchar(50);
set @field = N'FieldToSelect';

declare @sql nvarchar(3000);
declare @parmDefinition nvarchar(500);

SET @parmDefinition = N'@returnValueOUT nvarchar(50) OUTPUT';

set @sql = N'SELECT @ReturnValueOUT = ' + @Field + ' FROM [TableName] WHERE [SomeCondition]'

declare @returnValue nvarchar(50);
EXECUTE sp_executesql @sql, @parmDefinition, @returnValueOut = @returnValue OUTPUT;

SELECT @returnValue

关于sql - 更新一个变量的动态sql语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/536728/

相关文章:

mysql - 命名其他表中的列

mysql - 如何使用mysql中另一个表的计算结果更新表行

sql - 在 SQL Server 中对临时表使用 View 的优点是什么

SQL 数字数据类型截断值?

php - 为 Web 服务器遗留 PHP/MSSQL/MySQL 代码集成测试驱动开发

MySQL 即使在提交后也没有显示更新的数据

java - 如何在插入行之前在 Sybase SQL 中生成 ID

asp.net - 数据库与文件系统中的图像

sql-server - 如何获取 dm_exec_sql_text 的参数值

sql - 检查表是否存在,如果不存在,则在SQL Server 2008中创建它