2016-07-13 2 views
1
USE KronosNET22 
GO 

Create procedure eventossucursales4 
    @id nvarchar(max), 
    @dia nvarchar(max) 
as 
begin 
    declare @sqlstring nvarchar(max) 
    set @sqlstring = 'Select Code From ' + @dia + ' WHERE idObject = ''' + @id + ''' AND (CODE = ''TFHi2'' OR CODE = ''E603'')' 

    EXEC sp_executesql @sqlstring, @id,@dia 
end 
GO 

Execute eventossucursales4 'E4211537-09CD-45F2-BB5F-F20F642DE676','ObjectSignal_2016_05_23 ' 

Ошибка:SQL Server процедура динамического 2

Mens. 102, Nivel 15, Estado 1, Línea 1
Sintaxis incorrecta cerca de 'E4211537'.

enter image description here

Может кто-то помочь мне, чтобы понять это, почему его показ ошибку в объявлении переменной?

+0

сделал вы пытаетесь добавить точку с запятой (';') – Hogan

+0

, что не решает проблему – LuisBus90

+0

попробуйте удалить, @ идентификатор, @dia от sp_executesql линии. Вы создаете строку, поэтому вам не нужно передавать дополнительные параметры в sp_executesql. – Jeremy

ответ

0

Вы можете исключить передачу параметров, как кто-то прокомментировал. Если вы хотите, чтобы он работал как есть, вам нужно добавить список параметров. Я смог заставить его работать таким образом.

alter procedure eventossucursales4 
@id nvarchar(max), 
@dia nvarchar(max) 
as begin 
declare @sqlstring nvarchar(max) 
declare @ParmDefinition nvarchar(500) = '@dia nvarchar(max), @id nvarchar(max)' 

set @sqlstring = 'Select Code From ' + @dia + ' WHERE idObject = ''' + @id + ''' AND (CODE = ''TFHi2'' OR CODE = ''E603'')' 
exec sp_executesql @sqlstring, @ParmDefinition, @id = @id, @dia = @dia 
end 
GO 

Execute eventossucursales4 'E4211537-09CD-45F2-BB5F-F20F642DE676','ObjectSignal_2016_05_23 ' 
+0

Joe C, когда я поставил решение, которое вы мне дали, журнал все еще показывает мне это сообщение: Mens.102, Nivel 15, Estado 1, Línea 1 Sintaxis wronga cerca de 'E4211537'. – LuisBus90

+0

Thats странно, это работает для меня. Im использует sql2014 –

+0

im using sql2008 r2 – LuisBus90

Смежные вопросы