2012-12-12 13 views

Odpowiedz

34

Jak sugeruje Scott, nie można używać wyrażeń w OPENROWSET .Try tworząc dynamiczny SQL przekazać parametry

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 wymaga literałów ciągów, a nie wyrażeń. Narzeka na znak plusa, ponieważ nie oczekuje niczego więcej niż literał łańcuchowy, a ty podszeptałeś literał łańcuchowy operatorem.

Zobacz http://msdn.microsoft.com/en-us/library/ms190312.aspx który stanowi:

'query'

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

+0

Dzięki Scott, myślę, że MSG błąd byłem coraz dał mi ten pomysł. –

0

Na co warto. Powodem, dla którego używamy openrowset, a nie prosto połączonego zapytania serwera jest to, że przetwarzanie dla połączonego zapytania serwera dzieje się na lokalnym serwerze. (Powolne i często przywraca większość tabeli)

Tak, możemy wykonać połączenie łańcuchowe jak powyżej.

Inna opcja, w której masz łatwą składnię i moc parametrów.

Utwórz przechowywany proc na zdalnym polu, że proc ma wszystkie potrzebne parametry. połączeń przechowywanej proc z połączony ze standardowym zapytania do serwera (samym perf lub lepsze niż wyżej soultion i znacznie łatwiejszy do zakodowania z.

np linkedservername.database.dbo.myproc 123 „abc”, „someparam” getdate()

Tylko opcja ....

+1

ta odpowiedź może być lepiej, jeśli to wyjaśnione w jaki sposób rozwiązuje problem – 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

Witam i zapraszam do StackOverflow. Nie publikuj odpowiedzi tylko kodu, ale dołącz wyjaśnienie. ecially na takie pytanie, gdzie pytanie brzmi "dlaczego to nie działa?", a nie "co jeszcze by działało?" – Banana

+3

Podczas gdy ogólnie zgadzam się, że posty powinny mieć pewne wyjaśnienie, nie było wiele wyjaśnień potrzebnych jako na pytanie udzielono odpowiedzi w grudniu 2012 r. Znalazłem tę odpowiedź przydatną, ponieważ pokazuje wartości argumentów dla połączenia z plikiem Excel (argument bazy danych) i arkusz $ jako alternatywę dla bazy danych i tabeli SQL Server. – RyanB