我想创建一个存储过程,返回搜索“类似记录”的结果。我目前拥有的存储过程如下
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
答案 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'