Ожидаемый идентификатор или Quoted_ID в SQL

Вопрос:Я получаю следующую ошибку: "Incorrect Syntax near '.'. Expected ID or Quoted_ID". При попытке создать описанную ниже процедуру CREATE PROCEDURE [dbo].[SP_NAME] @DBName varchar(max) As Begin SELECT NBCGL_TRANSACTION.*, MRG_BSLA.GL_BSLA_CODE AS BSLA FROM @DBName..NBCGL_TRANSACTION LEFT OUTER JOIN MRG_BSLA ON NBCGL_TRANSACTION.BUSINESS = MRG_BSLA.BSLA_CODE WHERE NBCGL_TRANSACTION.TRANSACTION_TYPE = 2 END Лучший ответ: Вы не можете напрямую использовать переменные для имен

Вопрос:

Я получаю следующую ошибку:

«Incorrect Syntax near ‘.’. Expected ID or Quoted_ID».

При попытке создать описанную ниже процедуру

CREATE PROCEDURE [dbo].[SP_NAME] @DBName varchar(max) As Begin SELECT NBCGL_TRANSACTION.*, MRG_BSLA.GL_BSLA_CODE AS BSLA FROM @DBName..NBCGL_TRANSACTION LEFT OUTER JOIN MRG_BSLA ON NBCGL_TRANSACTION.BUSINESS = MRG_BSLA.BSLA_CODE WHERE NBCGL_TRANSACTION.TRANSACTION_TYPE = 2 END Лучший ответ:

Вы не можете напрямую использовать переменные для имен базы данных/схемы/таблицы/столбца. Для достижения своей цели вам необходимо использовать динамический SQL:

CREATE PROCEDURE [dbo].[SP_NAME] @DBName varchar(max) As Begin declare @query nvarchar(max) set @query = N’SELECT NBCGL_TRANSACTION.*, MRG_BSLA.GL_BSLA_CODE AS BSLA FROM ‘ + @DBName + N’..NBCGL_TRANSACTION LEFT OUTER JOIN MRG_BSLA ON NBCGL_TRANSACTION.BUSINESS = MRG_BSLA.BSLA_CODE WHERE NBCGL_TRANSACTION.TRANSACTION_TYPE = 2′ exec sp_executesql @query END

Оцените статью
Добавить комментарий