Хранимая процедура SQL для возврата результатов с несколькими параметрами
Я хочу создать хранимую процедуру, которая возвращает результаты поиска "похожих записей". Хранимая процедура у меня в настоящее время выглядит следующим образом
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).
Я могу подтвердить, что я передаю правильные значения в параметрах, и что существует несколько записей.
Это оператор выполнения при запуске
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 ответа
Без дополнительной информации, я просто догадываюсь, но, возможно, никакие данные не соответствуют вашим параметрам. процедура 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 Эрланда Соммарского
Проверьте все маленькие (очевидно, это никогда не может быть...) вещи...
1) Убедитесь, что процедура существует. В вашем утверждении create вы неправильно написали pro-*c-e-*d-ure
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'