-1

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

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
4

2 回答 2

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

你可以看看这个:Erland Sommarskog 在 T-SQL 中的动态搜索条件

于 2011-08-29T20:50:26.937 回答
0

检查所有的小(显然,它永远不可能是……)事情……

1) 验证程序是否存在。在您的创建语句中,您拼写错误 pro- * 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'
于 2011-08-29T21:11:02.650 回答