在SQL Server 2016中使用Openrowset读取特定值

时间:2017-12-30 11:54:44

标签: sql-server openrowset

此处的目的是从不同的服务器读取特定值,并将返回值存储在本地参数中以供以后使用。

以下是错误代码:

  

Msg 102,Level 15,State 1,Line 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='+@inhostnamn+';UID='+@inuser+';Pwd='+@password1+';Database='+@database+';Persist Security Info=True'',''select Last_ID FROM '+@database +'.dbo.Logg where Tables_sql=''Alarm'' '')';

print 'string =' + @sql_string;

exec sp_executesql @sql_string, N'@last_read_alarm1 varchar(30) OUTPUT', @last_read_alarm1=@last_read_alarm OUTPUT;

select @last_read_alarm
print @last_read_alarm;

现在我被卡住了。我无法看到我所犯的错误,并希望看到几个不同的眼睛。

1 个答案:

答案 0 :(得分:0)

感谢Andrei Odegov提供了很大帮助。它有助于在每一方都增加4 '

现在我的情况就是正确的代码:

set @sql_string = N'select @last_read_alarm= (select * from openrowset (''SQLNCLI'', ''Server='+@inhostnamn+';UID='+@inuser+';Pwd='+@password1+';Database='+@database+';Persist Security Info=True'',''select Last_ID FROM '+@database +'.dbo.Logg where Tables_sql='''''+@tmp_str+''''' ''))';

因此,查询的答案现在将以局部变量@last_read_alarm结束。