Несколько хранимых процедур на серверах sql взаимозаменяемы - PullRequest
1 голос
/ 20 сентября 2010

Моя служба развернута на нескольких IIS, и они выполняют значительное количество экземпляров (100-200) из 3-4 различных хранимых процедур одновременно. SP выполняются через "executetescalar".

Все SP возвращают разные типы значений. Я понял, что значения были заменены для вызовов SP, которые выполняются одновременно. Я уверен в этом, потому что я получил недопустимое исключение приведения для всех вызовов, и логирование SP было правильным.

Может кто-нибудь сказать мне, что пошло не так !!!

-Спасибо

CREATE PROCEDURE [DBO].[SPO_DATABASESERVER_GET_CONTEXT_FROMNWACCOUNTID_1.0.5]
            @NwAccountId      BIGINT  = NULL,              
            @ActionFlag VARCHAR(20) = 'NONE'      
AS

BEGIN    
DECLARE @DBID BIGINT
DECLARE @ConnectionString VARCHAR(250)    

IF COALESCE(@NWACCOUNTID,'') != ''                                      
    BEGIN           
      SELECT @DBID = DATABASEID
      FROM   NWACCOUNTMASTER
      WHERE  NWACCOUNTMASTERID = @NWACCOUNTID                                     
    END

 IF (COALESCE(@DBID,'') = '')
    BEGIN 
        RAISERROR ('No DB is assigned for NwAccountId %I64d.',16,1,@NwAccountId)
        RETURN 
    END

  IF EXISTS (SELECT 'X'
         FROM   ACDATABASESERVER
         WHERE  DATABASEID = @DBID)
  BEGIN
      SELECT
           @ConnectionString = CONNECTIONSTRING
      FROM   ACDATABASESERVER
      WHERE  DATABASEID = @DBID
  END

  IF (COALESCE(@ConnectionString,'') = '')
  BEGIN 
        RAISERROR ('SP failed to fetch ConnectionString for NwAccountId %I64d.',16,1,@NwAccountId)
        RETURN 
  END

SELECT @ConnectionString AS CONNECTIONSTRING
END

1 Ответ

1 голос
/ 20 сентября 2010

«недопустимое исключение приведения» не является ошибкой SQL ...

У вас есть другой веб-код, который ожидает разные типы возврата для одного и того же сохраненного процесса?

Это невозможно для SQL для смешивания или изменения разных типов возвращаемых данных, если каждый IIS вызывает один и тот же сервер / базу данных / хранимый процесс, и хранимый процесс имеет одну и ту же подпись outout.Единственными причинами могут быть:

  • разные базы данных
  • разные SQL-серверы
  • хранимые процедуры имеют IF SELECT int, varchar... ELSE SELECT varchar, int...
  • динамический SQL
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...