2017-12-30 15 views
0

다른 서버에서 특정 값을 읽고 나중에 사용할 수 있도록 반환 값을 로컬 매개 변수에 저장하는 것이 여기에 있습니다.SQL Server에서 Openrowset으로 특정 값 읽기 2016

메시지 102, 수준 15, 상태 1, 줄 3
근처의 구문이 잘못되었습니다 '알람': 여기

는 오류 코드입니다.
declare @sql_string nvarchar(400); 
declare @inhostnamn nvarchar(100) = 'BLUE65\SQLEXPRESS' 
declare @inuser nvarchar(50) = 'dev1' 
declare @password1 nvarchar(50) = 'dev1' 
declare @database nvarchar(100) = 'Test_destroy' 
declare @count_posts varchar(10) 
declare @tabellnamn varchar(50) = 'Alarms' 
declare @last_read_alarm varchar(30) 

set @tabellnamn = 'Logg' 

set @sql_string = N'set @last_read_alarm1 = cast(last_read as nvarchar(30)) select * from openrowset (''SQLNCLI'', ''Server='[email protected]+';UID='[email protected]+';Pwd='[email protected]+';Database='[email protected]+';Persist Security Info=True'',''select Last_ID FROM '[email protected] +'.dbo.Logg where Tables_sql=''Alarm'' '')'; 

print 'string =' + @sql_string; 

exec sp_executesql @sql_string, N'@last_read_alarm1 varchar(30) OUTPUT', @[email protected]_read_alarm OUTPUT; 

select @last_read_alarm 
print @last_read_alarm; 

지금 나는 끼 었어 : 여기

내가 시도 코드입니다. 내가 만든 오류를 볼 수 없으며 몇 가지 다른 눈을 기대하고 있습니다.

+0

[링크 된 서버] (https://docs.microsoft.com/en-us/sql/relational-databases/linked-servers/create-linked-servers-sql-server-database-engine)를 사용하지 않는 이유는 무엇입니까? ? –

+0

예 연결된 서버를 사용할 수는 있지만 SQL을 익히고 구문 오류를 이해하지 못합니다. 내 눈에는 구문이 정상적으로 보이기 때문입니다. –

+0

확인. 'Alarm'의 양쪽에 두 개의 따옴표를 더 추가하십시오. 이것은'' 'Alarm' '' ''처럼 보일 것입니다. –

답변

0

덕분에 Andrei Odegov에게 감사드립니다. 그것은 각 측면에 4 '을 넣는데 도움이되었습니다.

올바른 코드는 지금 내 경우에는 다음과 같습니다

set @sql_string = N'select @last_read_alarm= (select * from openrowset (''SQLNCLI'', ''Server='[email protected]+';UID='[email protected]+';Pwd='[email protected]+';Database='[email protected]+';Persist Security Info=True'',''select Last_ID FROM '[email protected] +'.dbo.Logg where Tables_sql='''''[email protected]_str+''''' ''))'; 

그래서 쿼리의 대답은 이제 지역 변수 @last_read_alarm에 종료됩니다.