Хранимая процедура SQL для возврата результатов с несколькими параметрами - PullRequest
0 голосов
/ 30 августа 2011

Я хочу создать хранимую процедуру, которая возвращает результаты поиска «похожих записей».Хранимая процедура, которую я сейчас использую, выглядит следующим образом:

CREATE PRODECURE [dbo].[viewSimilarRecords]
 @recordType varchar(25),
 @recordSource varchar(25)

 AS 
SELECT * FROM myTableName 
WHERE
(recordtype = @recordType) AND
(recordsource = @recordSource)

 GO

Проблема, с которой я сталкиваюсь, заключается в том, что при ее выполнении я получаю возвращаемое значение 0, а полученные строки не отображаются (SQL Server Management Studio).

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

Это оператор execute, когда он запускается

USE [databasename]
GO

DECLARE @return_value int

EXEC @return_value = [dbo].[ViewSimilarRecords]
    @recordType = N'Error',
    @recordSource = N'Local'


 SELECT 'Return Value' = @return_value

 GO

Ответы [ 2 ]

2 голосов
/ 30 августа 2011

Без дополнительной информации, я просто догадываюсь, но, возможно, данные не соответствуют вашим параметрам. процедура viewSimilarRecords, а не viewExactmatchingRecords. Как это закодировано, вы должны иметь точное соответствие для каждого параметра. Возможно, вам нужно попробовать что-то вроде этого:

CREATE PROCEDURE [dbo].[viewSimilarRecords]
 @recordType varchar(25),
 @recordSource varchar(25)

 AS 
SELECT * FROM myTableName 
WHERE
(recordtype  =@recordType   OR @recordType IS NULL) AND --<<change to OR??
(recordsource=@recordSource OR @recordSource IS NULL)
                          --^^^^^^^^^^^^^^^^^^^^^^^^
 GO

Вы можете взглянуть на это: Условия динамического поиска в T-SQL Эрланда Соммарскога

0 голосов
/ 30 августа 2011

Проверьте все мелкие ( очевидно, что это никогда не могло быть ... ) вещами ...

1) Убедитесь, что процедура существует. В вашем заявлении на создание вы неправильно написали p-r-o- * c -e- * d -u-r-e

2) Когда вы выполняете, вы применяете юникод (N ') к переменным, не относящимся к юникоду.

@recordType = N'Error', @recordSource = N'Local'

Попробуйте вместо этого:

@recordType =  'Error', @recordSource =  'Local'

3) Создайте параметры и выполните только эту часть процедуры напрямую (выделите и нажмите F5), чтобы убедиться, что вы получите результаты.

 ECLARE @recordType varchar(25)
 ECLARE @recordSource varchar(25) 
 SET @recordType = 'Error'
 SET @recordSource = 'Local'
 SELECT * FROM myTableName 
 WHERE
 (recordtype = @recordType) AND
 (recordsource = @recordSource)

4) Запустите это напрямую, все само по себе (если пункт 3 выше был успешным, чтобы убедиться, что вы находитесь в нужной базе данных:

   EXEC [dbo].[ViewSimilarRecords] 'Error','Local'
...