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