Syntaxe incorrecte près de ','. exec sp_executesql

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 

L'erreur est:

Syntaxe incorrecte près de ','

et je ne comprends pas que si la requête entière est bien sans erreurs zéro.

Merci beaucoup pour votre aide

essaye ça:

  1. Vous avez manqué de select
  2. Utilisez '''' au lieu de \" \"
  3. Requête de debugging à l'aide de l'printing de sa sortie

      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 

SET @consulta = 'pedi.id,pedi.folio,pedi.cliente_id,
devrait être
SET @consulta = 'SELECT pedi.id,pedi.folio,pedi.cliente_id,

Vous avez manqué select dans votre déclaration.

Il devrait être SET @consulta = 'select pedi.id,pedi.folio,pedi.cliente_id, et ainsi de suite

Vous avez des problèmes dans votre code.

  • Ajoutez SELECT au début de votre code: 'SELECT pedi.id,pedi.folio, ...
  • Ajoutez BEGIN/END à la clause IF , car en ce moment la deuxième ligne s'exécute toujours:
    IF (@selector = '' ET @order = '') SET @selector = 'pedi.fecha_creacion'; SET @order = 'DESC';
  • Vous ne filterz pas votre input et l'injection SQL peut se produire
  • Utilisez '' au lieu de \"