2012-12-12 10 views

risposta

34

Come suggerito da Scott, non è possibile utilizzare le espressioni in OPENROWSET .Try creando una SQL dinamico per passare i parametri

Declare @ID int 
Declare @sql nvarchar(max) 
Set @ID=1 
Set @sql='SELECT * 
FROM OPENROWSET(
       ''SQLNCLI'', 
       ''DRIVER={SQL Server};'', 
       ''EXEC dbo.usp_SO @ID =' + convert(varchar(10),@ID) + ''')' 

-- Print @sql 
Exec(@sql) 
9

OPENROWSET richiede letterali stringa, non espressioni. Si lamenta del segno più, perché non si aspetta nulla di più di una stringa letterale e hai sfasato la stringa letterale con un operatore.

Vedi http://msdn.microsoft.com/en-us/library/ms190312.aspx in cui si afferma:

'query'

Is a string constant sent to and executed by the provider...

+0

Grazie Scott, penso che il msg di errore mi è stato sempre mi ha dato questa idea. –

0

Per quello che vale. Il motivo per cui utilizziamo openrowset anziché una query server collegata direttamente è che l'elaborazione per una query server collegata avviene sul server locale. (Lento e spesso riporta indietro la maggior parte della tabella)

Sì, possiamo eseguire la concatinazione di stringhe come sopra.

Una diversa opzione in cui si ha facilità di sintassi e potenza dei parametri.

Creare un proc memorizzato nella casella remota, che proc ha tutti i parametri necessari. Chiamare la stored procedure da con una query server standard collegato (stesso perf o migliore rispetto al soultion sopra e significativamente più facile da codice con.

esempio linkedservername.database.dbo.myproc 123, 'abc', 'someparam', getdate()

solo un'opzione ....

+1

questa risposta potrebbe essere migliore se ha spiegato come si risolve il problema – FistOfFury

3
Declare @Route VARCHAR(200) 
Declare @sql nvarchar(max) 
Set @Route='C:\OCRevisiones.xlsx;' 
Set @sql='SELECT * INTO FFFF 
FROM OPENROWSET(
       ''Microsoft.ACE.OLEDB.12.0'', 
       ''Excel 12.0;HDR=YES;Database=' + @Route + ''', 
       ''SELECT * FROM [Sheet1$]'')' 

Print @sql 
--Exec(@sql) 
+5

Salve, e benvenuto su StackOverflow. Si prega di non postare solo la risposta al codice, ma di includere una spiegazione. ecialmente per una domanda come questa, dove la domanda è "perché non funziona?" e non "che altro potrebbe funzionare?" – Banana

+3

Mentre generalmente sono d'accordo sul fatto che i post dovrebbero avere qualche spiegazione, non c'era molta spiegazione necessaria la domanda è stata risolta nel dicembre 2012. Ho trovato questa risposta utile in quanto mostra i valori degli argomenti per la connessione a un file Excel (l'argomento del database) e il foglio $ come alternativa a un database e una tabella di SQL Server. – RyanB

Problemi correlati