sql-server-2008 – 存储过程中的表类型参数导致操作数类型冲突错误
发布时间:2020-05-25 05:00:48 所属栏目:MsSql 来源:互联网
导读:我想给一个标识符数组作为存储过程的参数. 存储过程如下所示: ALTER PROCEDURE [dbo].[SearchPerson] @personType INT = NULL, @city NVARCHAR(64) = NULL, @siteIds IntegerList READONLY, -- some other params...AS SEL
|
我想给一个标识符数组作为存储过程的参数. 存储过程如下所示: ALTER PROCEDURE [dbo].[SearchPerson]
@personType INT = NULL,@city NVARCHAR(64) = NULL,@siteIds IntegerList READONLY,-- some other params...
AS
SELECT
-- some fields...
FROM dbo.PersonView AS pv
WHERE
(
(@personType IS NULL OR pv.PersonType = @personType) AND
(@city IS NULL OR pv.City LIKE '%' + @city + '%') AND
(pv.SiteId in (SELECT si.Value FROM @siteIds AS si)) AND
-- some other params filter...
)
用户表类型如下所示: CREATE TYPE [dbo].[IntegerList] AS TABLE(
[Value] [int] NULL
)
当我从SSMS中的脚本调用存储过程时(我最初从.NET代码调用它时遇到同样的问题): DECLARE @siteIds AS IntegerList,@personType AS INT = 1 INSERT INTO @siteIds VALUES (1) EXEC [dbo].[SearchPerson] @personType,@siteIds 我收到了错误:
解决方法我找到了答案:这是表类型参数的顺序导致错误!表类型参数必须是存储过程参数中的第一个参数,并且在传递给存储过程调用的参数中也是ALSO! 存储过程: ALTER PROCEDURE [dbo].[SearchPerson]
@siteIds IntegerList READONLY,-- THIS PARAMETER HAS TO BE THE FIRST !
@personType INT = NULL,-- some other params...
AS
SELECT
-- some fields...
FROM dbo.PersonView AS pv
WHERE
(
(@personType IS NULL OR pv.PersonType = @personType) AND
(@city IS NULL OR pv.City LIKE '%' + @city + '%') AND
(pv.SiteId in (SELECT si.Value FROM @siteIds AS si)) AND
-- some other params filter...
)
电话: DECLARE @siteIds AS IntegerList,@personType AS INT = 1 INSERT INTO @siteIds VALUES (1) EXEC [dbo].[SearchPerson] @siteIds,@personType -- PUT @siteIds FIRST ! 一个sql server bug或者我错过了什么? (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
