检查链接服务器上是否存在列

时间:2016-12-01 10:19:17

标签: sql sql-server stored-procedures linked-server

我目前正在开展一个项目,我需要检查SQL Server中链接服务器上是否存在数据。下面的方法是我现在使用的方法,但它太慢了。

DROP PROCEDURE IF EXISTS dbo.HasEBoekhoudenBybtwnr
GO
CREATE PROCEDURE dbo.HasEBoekhoudenBybtwnr(@btwnr varchar(255))
AS
IF (EXISTS(SELECT TOP 1 AbBedrijf FROM [Server].[database].[dbo].[table] WHERE abOBNummer = @btwnr))
    SELECT 1
ELSE  
   SELECT 0
GO

我尝试使用sp_executesql并打开sql,但我不知道如何将其与if exists一起使用。任何人都可以帮我改进这种方法吗?

2 个答案:

答案 0 :(得分:0)

使用动态查询,如下所示:

DECLARE @sql VARCHAR (500)
SET @sql = '
IF EXISTS(SELECT TOP 1 1 FROM [server].database.dbo.'+ @btwnr + ')
    SELECT 1
ELSE
    SELECT 0 '

EXEC(@sql)

根据您更新的问题,您可以直接将变量值与列值进行比较。不需要动态查询。

答案 1 :(得分:0)

我现在已经使用sp_executesql修改了该过程,但它在性能上没有任何区别或者没有任何区别。所以我觉得最好坚持原来的程序,除非它没有我想要的那么快。

DROP PROCEDURE IF EXISTS dbo.HasEBoekhoudenBybtwnr
GO
CREATE PROCEDURE dbo.HasEBoekhoudenBybtwnr(@btwnr varchar(255))
AS
EXEC sp_executesql N'
IF (EXISTS(SELECT TOP 1 AbBedrijf FROM [Server].[database].[dbo].[table] WHERE abOBNummer = @btw))
    SELECT 1
ELSE
    SELECT 0 ',
N'@btw varchar(255)',
@btw = @btwnr
GO

我仍然感谢大家对此问题的投入