【发布时间】:2021-12-02 06:07:53
【问题描述】:
我知道我想太多了,但我已经反对这个太久了,所以我正在寻求帮助。
这是我要运行的语句:SELECT @cntMax = MAX(id) FROM [Raw_Item-FieldReport]
但是,表名是变量@reportTable
这不起作用:
SET @sql = 'SELECT @cntMax = MAX(id) FROM @reportTable'
EXEC sp_executesql @sql
我什至尝试在SET @sql 中使用实际的表名,但这也不起作用。
我没想到会这么难,请告诉我我遗漏了一些简单/明显的东西。
这里有完整的代码供需要的人使用:
DECLARE
@inTable nvarchar(255) = 'Raw_Item',
@reportTable nvarchar(255),
@fieldName nvarchar(255),
@cnt int,
@cntMax int,
@sql nvarchar(max)
SET @reportTable = @inTable + '-FieldReport'
SET @cnt = 1
SELECT @cntMax = MAX(id) FROM [Raw_Item-FieldReport]
PRINT @cntMax
SET @cntMax = 0
SET @sql = 'SELECT @cntMax = MAX(id) FROM [Raw_Item-FieldReport]'
EXEC sp_executesql @sql
PRINT @cntMax
SQL Server 12.0.2008.8(在 Azure 上)
【问题讨论】:
-
动态表名肯定有问题。您不能参数化对象名称。您必须创建一个具有正确表名的字符串。这通常是一些设计问题的迹象。
标签: sql sql-server variables dynamic-sql