txt from ejemplo sql variables sql-server-2008-r2 openrowset

ejemplo - SQL SELECT*FROM OPENROWSET con variable



openrowset sql server txt (2)

Estoy tratando de pasar una variable a una declaración SELECT en OPENROWSET, pero sigo recibiendo un error

DECLARE @dDateTIME DATE SET @dDateTIME = (SELECT SalesDate FROM dbo.SalesDate) INSERT INTO dbo.tblSales SELECT * FROM OPENROWSET(''MSDASQL'', ''dsn=mydsn;uid=myid;pwd=mypwd;'', ''SELECT ID, TranDate, ProductID, CostValue, SalesValue, QtySold, FROM tblSales WHERE TranDate='''' + @dDateTIME + '''''') DECLARE @dDateTIME DATE SET @dDateTIME = (SELECT SalesDate FROM dbo.SalesDate) DECLARE @SQL NVARCHAR(1024) = ''SELECT ID, TranDate, ProductID, CostValue, SalesValue, QtySold, FROM tblSales WHERE TranDate='''''' + CAST(@dDateTIME AS VARCHAR(64)) + '''''''' DECLARE @RunSQL NVARCHAR(max) SET @RunSQL= ''SELECT * FROM OPENROWSET (''''MSDASQL'''', ''''dsn=mydsn;uid=myid;pwd=mypwd;'''',''''EXEC @SQL'''')''`

¿Qué sintaxis utilizo para aplicar a @SQL ?

El error que recibo es:

El error es: Proveedor OLE DB "MSDASQL" para el servidor vinculado "(nulo)" mensaje devuelto "[General] [Interfaz del cliente ODBC] [LNA] [General] [Interfaz del motor ODBC] Error en el predicado: TranDate = ''(SELECCIONAR @ dDateTIME) ''"


Puedes crear dinámicamente una declaración SQL y luego ejecutar ese comando.

DECLARE @dDateTIME DATE, @RunSQL NVARCHAR(max) SET @dDateTIME = (SELECT SalesDate FROM dbo.SalesDate) SELECT @RunSQL = ''INSERT INTO dbo.tblSales SELECT * FROM OPENROWSET(''''MSDASQL'''', ''''dsn=mydsn;uid=myid;pwd=mypwd;'''', ''''SELECT ID, TranDate, ProductID, CostValue, SalesValue, QtySold, FROM tblSales WHERE TranDate='''''''''' + CONVERT(nvarchar, @dDateTIME, 112) + '''''''''''''')'' --PRINT @RunSQL EXEC sp_executesql @RunSQL


Su variable no está siendo concatenada a la cadena (es '''''' para cerrar una cadena con a '' ) para corregir esto (y realizar la conversión de tipo necesaria):

DECLARE @SQL NVARCHAR(1024) = ''SELECT ID, TranDate, ProductID, CostValue, SalesValue, QtySold, FROM tblSales WHERE TranDate='''''' + CAST(@dDateTIME AS VARCHAR(64)) + ''''''''

Además, no puede usar una expresión o variable con OPENROWSET por lo que necesitará llamarlo a través de EXEC() / sp_executeSQL , consulte; Usar una variable en OPENROWSET Query