我目前正在开展一个项目,我需要检查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
一起使用。任何人都可以帮我改进这种方法吗?
答案 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
我仍然感谢大家对此问题的投入