Как я могу значение переменной в таблицу SQL вместе с результатами из оператора выбора? - PullRequest
0 голосов
/ 01 июля 2019

Я пытаюсь вставить результаты оператора SQL select в таблицу, ДО ТОГО, как значение в переменной SQL внутри цикла FETCH. Я могу сделать просто вставку с результатами выбора, но не могу понять, как вставить значение переменной вместе с ним.

Вот что я пробовал:

IF CURSOR_STATUS('global','CURSOR_ALLDB_NAMES')>=-1
BEGIN
 DEALLOCATE CURSOR_ALLDB_NAMES
END
IF OBJECT_ID('tempdb..#TempIDs') IS NOT NULL DROP TABLE #TempIDs

CREATE TABLE #TempIDs(
 ID char(256)
 ,DBName char(256))

DECLARE @DB_NAME nvarchar(256);

DECLARE CURSOR_ALLDB_NAMES CURSOR FOR
SELECT name 
FROM Sys.Databases
WHERE name like 'ZM_%' 

OPEN CURSOR_ALLDB_NAMES

FETCH CURSOR_ALLDB_NAMES INTO @DB_NAME

WHILE @@Fetch_Status = 0
BEGIN
--  if  OBJECT_ID(@DB_NAME + '.dbo.Userlist') is not null   EXEC('Insert into #TempIDs (ID) Select ID from '+ @DB_NAME + '.dbo.Userlist')
  if  OBJECT_ID(@DB_NAME + '.dbo.Userlist') is not null   EXEC('Insert into #TempIDs (ID, DBName) Select ID, @DB_NAME from '+ @DB_NAME + '.dbo.Userlist')
  FETCH CURSOR_ALLDB_NAMES  INTO @DB_NAME
END

Select * from #TempIDs

В результате я получаю:

Msg 137, Level 15, State 2, Line 1
Must declare the scalar variable "@DB_NAME".

Я также пытался с этим, который не работал:

if  OBJECT_ID(@DB_NAME + '.dbo.Userlist') is not null   EXEC('Insert into #TempIDs (ID, set DBName=''' +@DB_NAME + ''') Select ID  from '+ @DB_NAME + '.dbo.Userlist')
  FETCH CURSOR_ALLDB_NAMES  INTO @DB_NAME

и это тоже не сработало:

if  OBJECT_ID(@DB_NAME + '.dbo.Userlist') is not null   EXEC('Insert into #TempIDs (ID, DBName=''' +@DB_NAME + ''') Select ID  from '+ @DB_NAME + '.dbo.Userlist')
  FETCH CURSOR_ALLDB_NAMES  INTO @DB_NAME

1 Ответ

0 голосов
/ 02 июля 2019

Ответ благодаря @JNevil в комментариях:

Изменить оператор SQL.Эта строка была изменена, и теперь она работает:

  if OBJECT_ID(@DB_NAME + '.dbo.Userlist') is not null EXEC('Insert into #TempIDs (ID, DBName) Select ID, ''' + @DB_NAME + ''' from ' + @DB_NAME + '.dbo.Userlist')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...