Результаты SQL Server 2008 SMS против Visual Studio 2010 Server Explorer

#visual-studio-2010 #sql-server-2008 #stored-procedures #server-explorer

#visual-studio-2010 #sql-server-2008 #хранимые процедуры #сервер-проводник

Вопрос:

у меня проблема с моим SQL-запросом, который я написал в Sql Server 2008 Express SMS и использую внутри Visual Studio 2010.

Основы: На веб-странице есть поле ввода. Он используется для поиска имени пользователя, адреса, идентификатора и т.д. Когда я использую имя пользователя на веб-сайте или внутри встроенного Visual Studio Server Explorer, например «Kargul» (выдуманный), он не вернет никаких результатов с использованием моей хранимой процедуры. Однако в SQL Server 2008 Express SMS та же хранимая процедура возвращает допустимый результат.

Я чего-то не понимаю? Вот моя процедура:

 SET NOCOUNT ON;

DECLARE @vars NVARCHAR(50);
SET @vars = '%'   @searchTerm   '%';

SELECT a.PersonId, Stat.StatusId, a.Honorific, a.FirstName, a.LastName, a.Street1, a.Street2, a.City, a.State, a.Zip, a.Phone, a.Email FROM Persons AS a
JOIN dbo.PersonStatus as Stat
ON a.StatusId = Stat.StatusId
    WHERE
        a.FirstName LIKE (@vars)
        UNION
        SELECT a.PersonId, Stat.StatusId, a.Honorific, a.FirstName, a.LastName, a.Street1, a.Street2, a.City, a.State, a.Zip, a.Phone, a.Email FROM Persons AS a
            JOIN dbo.PersonStatus as Stat
            ON a.StatusId = Stat.StatusId
                WHERE
        a.LastName LIKE (@vars)
        UNION
        SELECT a.PersonId, Stat.StatusId, a.Honorific, a.FirstName, a.LastName, a.Street1, a.Street2, a.City, a.State, a.Zip, a.Phone, a.Email FROM Persons AS a
            JOIN dbo.PersonStatus as Stat
            ON a.StatusId = Stat.StatusId
                WHERE
        a.Street1 LIKE (@vars)
        UNION
        SELECT a.PersonId, Stat.StatusId, a.Honorific, a.FirstName, a.LastName, a.Street1, a.Street2, a.City, a.State, a.Zip, a.Phone, a.Email FROM Persons AS a
            JOIN dbo.PersonStatus as Stat
            ON a.StatusId = Stat.StatusId
                WHERE
        a.City LIKE (@vars)
        UNION
        SELECT a.PersonId, Stat.StatusId, a.Honorific, a.FirstName, a.LastName, a.Street1, a.Street2, a.City, a.State, a.Zip, a.Phone, a.Email FROM Persons AS a
            JOIN dbo.PersonStatus as Stat
            ON a.StatusId = Stat.StatusId
                WHERE
        a.PersonId LIKE (@vars)
        UNION
        SELECT a.PersonId, Stat.StatusId, a.Honorific, a.FirstName, a.LastName, a.Street1, a.Street2, a.City, a.State, a.Zip, a.Phone, a.Email FROM Persons AS a
            JOIN dbo.PersonStatus as Stat
            ON a.StatusId = Stat.StatusId
                WHERE
        a.State LIKE (@vars)
    ORDER BY PersonId;
  

Ответ №1:

Запустите трассировку профилировщика на сервере, чтобы увидеть, что выполняется при запуске через VS2010; Возможно ли, что параметр поиска не передается? Или, может быть, вам нужно установить NOCOUNT в вашей программе.

Комментарии:

1. извините, у меня установлен параметр NOCOUNT в программе, я просто исключил его из примера. Я добавил это сейчас. Кроме того, когда я щелкаю правой кнопкой мыши по сохраненной процедуре в VS и выбираю ВЫПОЛНИТЬ, вручную передавая параметр, я получаю 0 результатов в окне ВЫВОДА.