2014-11-26 5 views
2
ALTER PROCEDURE [dbo].[proc_bandejaPedidos] 
    @id_usuario INT = 0, 
    @selector NVARCHAR(50) = '', 
    @order NVARCHAR(50) = '', 
    @consulta NVARCHAR(MAX) = '' 
AS 
BEGIN 
    SET NOCOUNT ON; 

    IF(@selector = '' AND @order = '') 
      SET @selector = 'pedi.fecha_creacion'; 
      SET @order = 'DESC'; 

    SET @consulta = 'pedi.id,pedi.folio,pedi.cliente_id, 
        eniac_clientes.rfc, 
        eniac_clientes.nombre+\" \"+eniac_clientes.apellido_paterno+\" \"+eniac_clientes.apellido_paterno AS Cliente, 
        pedi.fecha_creacion, 
        pedi.importe, 
        estatus_pi.estatus, 
        eniac_sucursales.nombre AS sucursal 

        FROM pedidos AS pedi 

    INNER JOIN gestion_pedidos_eniac.dbo.sucursales AS eniac_sucursales ON eniac_sucursales.id_sucursal = pedi.sucursal_id 
    INNER JOIN gestion_pedidos_eniac.dbo.clientes AS eniac_clientes ON eniac_clientes.id = pedi.cliente_id 
    INNER JOIN estatus_pedido AS estatus_pi ON estatus_pi.id = pedi.estatus 

    WHERE pedi.usuario_id = '+ CAST(@id_usuario AS NVARCHAR)+' 
    ORDER BY ' + @selector + ' '+ @order + '' 

    EXEC sp_executesql @consulta 

END 

Ошибка:Неверный синтаксис рядом с ','. Exec sp_executesql

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

, и я не понимаю, что если весь запрос отлично без ошибок нулевых.

Большое спасибо за вашу помощь

ответ

2

попробовать это:

  1. Вы пропустили select
  2. Использование '''' вместо \" \"
  3. Debug запрос с использованием печати его выход

    ALTER PROCEDURE [dbo].[proc_bandejaPedidos] 
    
        @id_usuario INT = 0, 
        @selector NVARCHAR(50) = '', 
        @order NVARCHAR(50) = '', 
        @consulta NVARCHAR(MAX) = '' 
    AS 
    
    BEGIN 
    
        SET NOCOUNT ON; 
        IF(@selector = '' AND @order = '') 
          SET @selector = 'pedi.fecha_creacion'; 
          SET @order = 'DESC'; 
    
        SET @consulta = 'select pedi.id,pedi.folio,pedi.cliente_id, 
            eniac_clientes.rfc, 
            eniac_clientes.nombre+'' ''+eniac_clientes.apellido_paterno+'' ''+eniac_clientes.apellido_paterno AS Cliente, 
            pedi.fecha_creacion, 
            pedi.importe, 
            estatus_pi.estatus, 
            eniac_sucursales.nombre AS sucursal 
    
            FROM pedidos AS pedi 
    
        INNER JOIN gestion_pedidos_eniac.dbo.sucursales AS eniac_sucursales ON eniac_sucursales.id_sucursal = pedi.sucursal_id 
        INNER JOIN gestion_pedidos_eniac.dbo.clientes AS eniac_clientes ON eniac_clientes.id = pedi.cliente_id 
        INNER JOIN estatus_pedido AS estatus_pi ON estatus_pi.id = pedi.estatus 
    
        WHERE pedi.usuario_id = '+ CAST(@id_usuario AS NVARCHAR)+' 
        ORDER BY ' + @selector + ' '+ @order + '' 
    
        EXEC sp_executesql @consulta 
    
    
        print (@consulta) END 
    
+0

Большое спасибо за вашу помощь Ganesh – Vesper

+0

@Vesper Ваше приветствие –

1

SET @consulta = 'pedi.id,pedi.folio,pedi.cliente_id,
должен быть
SET @consulta = 'SELECT pedi.id,pedi.folio,pedi.cliente_id,

1

Вы пропустили select в своем заявлении.

Это должно быть SET @consulta = 'select pedi.id,pedi.folio,pedi.cliente_id, и так далее

1

У вас есть некоторые проблемы в коде.

  • Добавить SELECT к началу кода: 'SELECT pedi.id,pedi.folio, ...
  • Добавить BEGIN/END к статье IF, а прямо сейчас вторая линия работает всегда:
    IF (@selector = '' И @order = ' ') SET @selector =' pedi.fecha_creacion '; SET @order = 'DESC';
  • Вы не фильтровать входные и SQL Injection может произойти
  • Использование '' вместо \"
Смежные вопросы