Miss R Ответов: 1

Sql выберите где в использовании динамического SQL


Привет,

Я использую динамический sql и пытаюсь выполнить "where in" из другой таблицы, однако у меня возникают проблемы с синтаксисом.

Что я уже пробовал:

DECLARE @accountprofit nvarchar(max)
DECLARE @accountprofit2 nvarchar(max)
DECLARE @accountprofile nvarchar(max)
DECLARE @accountprofile2 nvarchar(max)


set @accountprofit = 'select cust_no from G.DBO.Clients'
EXEC(@accountprofit)


SET @accountprofile2 = 'SELECT ACC,
CUST
FROM ACCOUNTTABLE   AP
WHERE ap.cust in ('  + @accountprofit +  ') '

exec @accountprofile2

SET @accountprofile = 'SELECT * into ##accountprofile FROM OPENQUERY([MYSERVER],' + '''' + @accountprofile2 + '''' + ')'

EXEC(@accountprofile)

select * from ##accountprofile

Suvendu Shekhar Giri

Какую ошибку он показывает?

1 Ответов

Рейтинг:
1

David_Wimbley

Без вашей схемы (я ленив, чтобы перепроектировать с помощью таблиц var) это будет немного трудно быть уверенным.

При размещении в одну переменную ваш sql выглядит компилируемым вплоть до этого

SELECT * into ##accountprofile FROM OPENQUERY([MYSERVER],'SELECT ACC,CUST FROM ACCOUNTTABLE AP WHERE ap.cust in (select cust_no from G.DBO.Clients)')


Мое лучшее предположение заключается в том, что ваш оператор SELECT рядом с [MYSERVER] был помещен туда в виде строки, вместо этого он должен выглядеть следующим образом

SELECT * into ##accountprofile FROM OPENQUERY([MYSERVER],(SELECT ACC,CUST FROM ACCOUNTTABLE AP WHERE ap.cust in (select cust_no from G.DBO.Clients)))


Чтобы добиться этого, вы должны сделать следующее в своей переменной @accountprofile.

SET @accountprofile = 'SELECT * into ##accountprofile FROM OPENQUERY([MYSERVER], (' + @accountprofile2 + '))'


Если это не решит вашу проблему, то если вы хотите предоставить какую-то схему для выполнения этого запроса вместе с фактическим сообщением об ошибке, я буду рад взглянуть, когда у меня будет время.