0

我想使用 sql 字符串将选择值分配给变量。下面是我的代码:

DECLARE @maxRow INT, @tableName NVARCHAR(128) = N'whatever';

select @maxRow=Max(id) from @tableName

但这会引发错误:

消息 1087,级别 16,状态 1,行 3
必须声明表变量“@tableName”。

即使我确实声明了变量。

4

1 回答 1

1

除非将变量放入动态 SQL 中,否则不能将变量用作表名。该代码当前期望@tableName是一个表变量,而不是一个字符串,尽管从您的语法中可以清楚地看出这不是您想要的。这种用法闻起来像次优设计,并且会导致重大的 SQL 注入风险,但您可以尝试以下代码:

DECLARE @maxRow INT;

DECLARE @sql NVARCHAR(MAX) = N'SELECT @maxRow = MAX(id) FROM ' 
  + QUOTENAME(@tableName) + ';';

EXEC sp_executesql @sql, N'@maxRow INT OUTPUT', @maxRow OUTPUT;

PRINT @maxRow;

请务必阅读 SQL 注入和规范化。

于 2013-08-26T21:09:55.990 回答