无论如何,您都需要在 Sproc 的主体中使用 NOCOUNT(感谢您在有无的情况下对其进行了测试)
在这种情况下,我得到了对 Sproc 的实际调用(从我的 APP 中的 Debug 或使用 SQL Profiler),然后将其插入 SSMS 或您使用的任何 IDE,将其包装在 ROLLBACK 事务中(所以它不能意外地做出任何改变)。注意:使用您的 IDE 登录到 SQL Server,使用与应用程序将使用的凭据相同的凭据。
BEGIN TRANSACTION
EXEC StaffEnquirySurnameSearch @searchterm = 'FOOBAR'
ROLLBACK
看看你会得到什么。使用 TEXT 模式进行输出,而不是可能隐藏某些内容的 GRID 模式
只是为了说明我认为应该如何将 NOCOUNT 添加到您的 SProc 中:
CREATE PROCEDURE StaffEnquirySurnameSearch
@searchterm varchar(255)
AS
SET NOCOUNT ON
SELECT AD.Name, AD.Company, AD.telephoneNumber, AD.manager, CVS.Position,
CVS.CompanyArea, CVS.Location, CVS.Title, AD.guid AS guid,
AD.firstname, AD.surname
FROM ADCVS AD
LEFT OUTER JOIN CVS ON
AD.Guid=CVS.Guid
WHERE AD.SurName LIKE @searchterm
ORDER BY AD.Surname, AD.Firstname
GO
我注意到您没有在表前加上数据库所有者(最常见的是“dbo”),这可能意味着任何人都拥有额外的副本,并且从应用程序权限的角度来看它们是默认的,尽管我认为这不会改变 [SQL 版本之间] 的结果集,但是,同样的事情适用于 Sproc 的所有权,您可能会调用一些较早的版本,为不同的所有者创建。
在您的 ASP.NET 代码中定义 Sproc 名称的地方(我似乎在您的链接问题中找不到)也应该定义所有者,即
EXEC dbo.StaffEnquirySurnameSearch @searchterm = 'FOOBAR'