2016-05-02 3 views
1

Когда я запускаю следующий код SIMPLE, я получаю следующую ошибку: «Должен объявить переменную таблицы @tableName».Область переменных для курсоров в SQL Server?

Я не уверен, почему: Я попробовал DECLAREing переменную в инструкции WHILE, но я все равно получаю ту же глупую ошибку. Все, что мне нужно, это запросить все таблицы в моей базе данных (myDB) и вывести их.

DECLARE @tableName VARCHAR(80) 
DECLARE TableName_Cursor CURSOR FAST_FORWARD FOR 
    SELECT TABLE_NAME FROM myDB.INFORMATION_SCHEMA.Tables 

OPEN TableName_Cursor 

FETCH NEXT FROM TableName_Cursor INTO @tableName 

WHILE @@FETCH_STATUS =0 
BEGIN 
--DECLARE @tableName VARCHAR(80) 
--USE myDB 
    SELECT * FROM @tableName 
    FETCH NEXT FROM TableName_Cursor INTO @tableName 
END 
CLOSE TableName_Cursor 
DEALLOCATE TableName_Cursor 

Большое вам спасибо за помощь!

+0

Как вы можете видеть, я даже попытался с помощью «использовать», чтобы убедиться, что это не использовать DB вопрос – LearnByReading

ответ

3

Ничего не делать с variable рамки здесь

Вам нужно Dynamic SQL сделать это

Declare @sql varchar(8000)= '' 
WHILE @@FETCH_STATUS =0 
BEGIN 
    Set @sql = ''  
    Set @sql = 'SELECT * FROM ' +QUOTENAME(@tableName) 
    EXEC(@sql) 
    FETCH NEXT FROM TableName_Cursor INTO @tableName 
END 
+0

Это первый раз, когда я слышу об этом ... – LearnByReading

+0

@LearnByReading - дополнительную информацию о 'EXEC' можно найти здесь. https://msdn.microsoft.com/en-us/library/ms188332.aspx –

+0

Вы были правы, это был вопрос. Я удивлен этим, хотя я написал довольно много SQL, но не столкнулся с этой конкретной проблемой. Спасибо! – LearnByReading

Смежные вопросы