我在存储过程中使用OPENQUERY(从链接服务器获取数据)时遇到问题。我一直在阅读SQL变量,但似乎无法使它工作,所以也许我误解了SQL中的变量/字符串。它抛出错误“'+'附近的语法不正确。”而且我不确定我做错了什么。
代码:
ALTER PROCEDURE [dbo].[sp_getPerson]
@myName nvarchar(MAX)
AS
BEGIN
SET NOCOUNT ON;
SELECT *
FROM OPENQUERY(MY_LINKED_SERVER, 'SELECT * FROM myTable
WHERE (myName= ''' + @myName + ''')
') AS derivedtbl_1
END
理论上这应该有效吗?
答案 0 :(得分:1)
我将整个查询放入变量并执行变量。
declare @myName nvarchar(MAX)
declare @sqltext varchar(max)
select @myName = 'Some Name'
select @sqltext='
select * from openquery(MY_LINKED_SERVER,''select * from database.schema.table
where myName = '''+@myName +'''
)'
exec (@sqltext)
如果使用LINKED_SERVER.DATABASE.SCHEMA.TABLE,则可能会出现性能问题,具体取决于表大小等,因为此查询不使用索引。
答案 1 :(得分:0)
您所要做的就是通过脚本添加链接服务器
http://msdn.microsoft.com/en-us/library/ms189811.aspx sp_addlinkedsrvlogin
如果您的链接服务器是TEST-SQL且数据库是test01且表名是testtb
和....
从另一台服务器查询它是这样的。
select * from [TEST-SQL].test01.dbo.testtb linktedTB where ....
您还可以将表连接到链接服务器。