SQL存储过程以返回具有多个参数的结果

时间:2011-08-29 20:39:00

标签: sql stored-procedures sql-parametrized-query

我想创建一个存储过程,返回搜索“类似记录”的结果。我目前拥有的存储过程如下

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)。

我可以确认我在params中传递了正确的值,并且确实存在多个记录。

这是执行时的执行语句

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 个答案:

答案 0 :(得分: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

你可以看看这个:Dynamic Search Conditions in T-SQL by Erland Sommarskog

答案 1 :(得分:0)

检查所有的小事(显然,它永远不会...... )事情...

1)验证程序是否存在。在您的创建语句中,您拼错了亲 * c -e- * d -ure

2)当你执行时,你对非unicode变量强制执行unicode(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'
相关问题