2015-05-15 4 views
-3
@tablen1 varchar(32), 
@tablen2 varchar(32) 
as 
DECLARE @sqlCommand varchar(1000) 
DECLARE @table1 varchar(MAX) 
DECLARE @table2 varchar(MAX) 
DECLARE @table3 varchar(MAX) 
set @table1 = @tablen1 
set @table2 = @tablen2 
set @table3 = 'AB_Dispensing' 
SET @sqlCommand = 'SELECT ' [email protected]+'.ATM_ID,'[email protected]+'.LE,'[email protected]+'.LE,'[email protected]+'.Dispensed'' 
FROM '[email protected]+','[email protected]+','[email protected]+' 

where '[email protected]+'.atm_id = '[email protected]+'.atm_id''''AND''' [email protected]+'.ATM_ID = '[email protected]+'.ATM_ID' 
    EXEC (@sqlCommand) 

Когда я запустить этот запрос, как это:Что случилось в моем запросе?

exec AB_DIF _3_0_PM_14_MAY,_3_2_PM_14_MAY 

Я получаю это сообщение

Неправильный синтаксис около 'AB_Dispensing'.

+1

Боковое примечание: всегда используйте явное соединение – sqluser

+6

Посмотрите на фактическую строку SQL в '@ sqlCommand'. Наверное, слишком много цитат. – dnoeth

+0

'SELECT @ sqlCommand', чтобы увидеть, что вы используете – sqluser

ответ

3

Это всегда удобно печатать динамический sql и проверять, действительно ли это.

Если вы передаете 't1' и 't2' в качестве входных данных для кода и печати @SQLCommand вы получите:

SELECT t1.ATM_ID,t1.LE,t2.LE,AB_Dispensing.Dispensed' 
FROM t1,t2,AB_Dispensing 

where t1.atm_id = t2.atm_id''AND'AB_Dispensing.ATM_ID = t1.ATM_ID 

Обратите внимание на ', который является причиной этого SQL недействительным. Вам необходимо удалить ненужные ', используемые в .Dispensed'', и ''''AND'''

Это то, что ваш sql должен быть.

declare @tablen1 varchar(32) = 't1', 
@tablen2 varchar(32) = 't2' 

DECLARE @sqlCommand varchar(1000) 
DECLARE @table1 varchar(MAX) 
DECLARE @table2 varchar(MAX) 
DECLARE @table3 varchar(MAX) 
set @table1 = @tablen1 
set @table2 = @tablen2 
set @table3 = 'AB_Dispensing' 
SET @sqlCommand = 'SELECT ' [email protected]+'.ATM_ID,'[email protected]+'.LE,'[email protected]+'.LE,'[email protected]+'.Dispensed 
FROM '[email protected]+','[email protected]+','[email protected]+' 

where '[email protected]+'.atm_id = '[email protected]+'.atm_id AND ' [email protected]+'.ATM_ID = '[email protected]+'.ATM_ID' 
--print @SQlCommand 
    EXEC (@sqlCommand) 
Смежные вопросы