Как использовать динамическое имя базы данных в SQL-запросе
Привет,
Здесь у меня есть 2 базы данных, одна из которых-мой FARVISIONDB, а другая-JKUMARJV.У обоих один и тот же стол.Здесь используйте check Organization, то есть базу данных с переднего конца.Здесь я создал хранимую процедуру с datanm в качестве параметра.
Что я уже пробовал:
So my query inside stored procedure like <pre>DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX),@dbnm varchar(1000),@rslt varchar(max) set @dbnm='farvisiondb' set @cols = 'STUFF((SELECT distinct '','' + QUOTENAME(STATENAME) from ((select CODE from '+@dbnm+'..M_STATEWISEGSTINACTAG) e inner join (select CODE,STATENAME from '+@dbnm+'..M_STATEMASTER) f on e.code=f.code) FOR XML PATH(''''), TYPE).value(''.'', ''NVARCHAR(MAX)'') ,1,1,'''')' print @cols EXEC sp_executesql @cols, N'@rslt varchar output',@rslt OUTPUT
Он отлично печатает запрос, то есть когда я передаю farvisiondb в качестве параметра, то он идеально подходит
STUFF((SELECT distinct ',' + QUOTENAME(STATENAME) from ( (select CODE from farvisiondb..M_STATEWISEGSTINACTAG) e inner join (select CODE,STATENAME from farvisiondb..M_STATEMASTER) f on e.code=f.code ) FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)') ,1,1,'')
Но это не исключено.
Пожалуйста, помогите мне.Заранее спасибо.
BinnyVishwant
Работает ли это для jkumarjv db?
SujataJK
нет, я имею в виду в 1-м запросе .У меня есть команда print, поэтому ее результаты - мой второй запрос, который я показал выше.Это означает, что мой запрос выполняется до инструкции print, но когда я собираюсь выполнить @cols, то он показывает ошибку типа
Msg 156, Уровень 15, Состояние 1, Строка 6
Неправильный синтаксис рядом с ключевым словом "FOR".
BinnyVishwant
можете ли вы попробовать удалить onedot(.)i, e. farvisiondb..M_STATEWISEGSTINACTAG >
farvisiondb.M_STATEWISEGSTINACTAG
BinnyVishwant
Также попробуйте выполнить только выбрать полу сначала и проверить, действительно ли вы получаете необходимые результаты! указав свое имя базы данных вручную
SujataJK
да, я пытался .Работает, когда я предоставляю ручное имя базы данных
BinnyVishwant
попробуйте дать псевдонимное имя раньше для
") в качестве
ПО ПУТИ В XML("), ТИПА).значение('.', 'ТИП NVARCHAR(МАКС)') ,1,1,")"
SujataJK
Я тоже пробовал это, но это дает ту же ошибку.
Для дальнейшего оформления, пожалуйста, проверьте мою хранимую процедуру..
создайте процедуру [dbo].[GSTIN_Update]
АС
НАЧАТЬ
Объявите @cols как NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF ((SELECT distinct ',' + QUOTENAME(STATENAME)
от (
(выберите код из FARVISIONDB..M_STATEWISEGSTINACTAG) e внутреннее соединение
(выберите код, имя состояния из FARVISIONDB..M_STATEMASTER) f on e. code=f. code
)
ПО ПУТИ В XML("), ТИПА).значение('.', 'ТИП NVARCHAR(МАКС)') ,1,1,")
print @cols;
set @query = 'SELECT CtrlAc, DESCR,' + @cols + ' from
(выберите c. CtrlAc,a.DESCR,s.GSTIN, stcd.statename из
(выберите accd, descr, MAINACCD из FARVISIONDB..M_LEDGER) в качестве внутреннего соединения
(выберите код,Gstin,ОРКК из FARVISIONDB..M_STATEWISEGSTINACTAG), как и на.ОРКК = С. ОРКК внутреннее соединение
(Выберите код, имя состояния, UT из FARVISIONDB..M_STATEMASTER) как STCD на s. CODE=stcd.КОД ВНУТРЕННЕГО СОЕДИНЕНИЯ
(Выберите ACCD, DESCR как CtrlAc из FARVISIONDB..M_LEDGER) как C на c. ACCD=a.MAINACCD
) икс
стержень
(
МАКС(GSTIN)
для имени состояния в (' + @cols + ')
) п '
выполнение запроса)
PRINT @query;
КОНЕЦ;
Это моя статическая процедура, я просто хочу заменить FARVISIONDB параметром @dbnm.
здесь @Cols содержит имя состояния, которое я использовал в @query.
я.е @седла содержится
[Бихар], [ДАДРА и нагар ХАВЕЛИ], [Даман и ДИУ], [Дели], [Гоа], [Гуджарат], [Харьяна], [Джаркханд], [Карнатака], [Мадхья-Прадеш], [Махараштра], [Раджастхан], [Тамилнаду], [Телангана], [Уттар-Прадеш]