2016-12-01 8 views
0

В настоящее время я работаю над проектом, в котором мне нужно проверить, существуют ли данные на связанном сервере в 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 и Open SQL, но я не знаю, как использовать его с if exists. Может ли кто-нибудь помочь мне улучшить этот метод?

+0

и нужно проверить столбец или таблицу или оба – Chanukya

+0

только столбец сама таблица является довольно большой –

+0

может у проверить один раз. – Chanukya

ответ

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) 

В соответствии с обновленным вопросом, вы можете напрямую сравнить значение переменного значения столбца. Динамический запрос не нужен.

+0

Нет таблицы, называемой btwnr, это значение, которое находится в таблице –

+0

Я хочу сказать, что это @btwnr - это переменная, которая у вас есть, и если вы передаете имя таблицы в ней, тогда вам нужно использовать динамический запрос для выбор if существует, и если значение столбца вы можете сделать непосредственно, как вы делаете сейчас. Вы не должны получать никаких проблем, если все в порядке. – Susang

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 

Я бы еще поблагодарить всех за их вклад в этом вопросе

 Смежные вопросы

  • Нет связанных вопросов^_^