Sql server 为什么这个T-SQL变量不保留其值?

Sql server 为什么这个T-SQL变量不保留其值?,sql-server,tsql,variables,stored-procedures,Sql Server,Tsql,Variables,Stored Procedures,问题是当它试图运行以下语句时 SELECT @rowCount = COUNT(1) FROM @currentTable 我收到一个错误,它说必须声明变量'@currentTable' 以下是完整的代码: CREATE TABLE #RequiredTables ( ID INT IDENTITY(1,1), TableName VARCHAR(200) ) DECLARE @counter INT DECLARE @rowCount INT DECLARE @tableC

问题是当它试图运行以下语句时

SELECT @rowCount = COUNT(1) FROM @currentTable
我收到一个错误,它说必须声明变量'@currentTable'

以下是完整的代码:

CREATE TABLE #RequiredTables (
    ID INT IDENTITY(1,1),
    TableName VARCHAR(200)
)

DECLARE @counter INT
DECLARE @rowCount INT
DECLARE @tableCount INT
DECLARE @currentTable VARCHAR(200)
DECLARE @query VARCHAR(6000)
SET @counter = 1

INSERT INTO #RequiredTables
SELECT 'Areas'
UNION ALL
SELECT 'Brands'
UNION ALL
SELECT 'CardsEnrolled'
UNION ALL
SELECT 'CardsMatrix'
UNION ALL
SELECT 'CardsUtilized'
UNION ALL
SELECT 'Clients'
UNION ALL
SELECT 'Customers'
UNION ALL
SELECT 'DoctorMatrix'
UNION ALL
SELECT 'DoctorMatrixPromo'
UNION ALL
SELECT 'Doctors'
UNION ALL
SELECT 'DoctorClass'
UNION ALL
SELECT 'Employees'
UNION ALL
SELECT 'MedCenters'
UNION ALL
SELECT 'pretagging_dsm_allocations'
UNION ALL
SELECT 'pretagging_new_cards'
UNION ALL
SELECT 'pretagging_data'
UNION ALL
SELECT 'pretagging_cards'
UNION ALL
SELECT 'pretagging_status'
UNION ALL
SELECT 'SKUs'
UNION ALL
SELECT 'Specializations'
UNION ALL
SELECT 'TAs'
UNION ALL
SELECT 'Territories'
UNION ALL
SELECT 'TerritoryMatrix'

SELECT @tableCount = COUNT(1) FROM #RequiredTables

WHILE @counter <= @tableCount
BEGIN
    SELECT @currentTable = TableName FROM #RequiredTables WHERE ID = @counter
    SELECT @rowCount = COUNT(1) FROM @currentTable
    SET @counter = @counter + 1
END
我认为不能使用变量将tablename传递给from子句

当我尝试时,错误是必须声明表变量@currentTable

我认为,当SQLServer执行查询时,它是在寻找一个表变量,而不是varchar变量


希望这能有所帮助。

很可能您的第一个SELECT子句没有获取currentTable,因此它为空,这可能是因为没有ID=counter的表……您不能以这种方式编写查询,您必须使用动态SQL抱歉,这是一个存储过程@实际上,我得到的值是面积