我希望将一个标识符数组作为参数传递给存储过程。
存储过程如下:
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
我遇到了错误:
操作数类型不匹配:int 与 IntegerList 不兼容。
System.Data.Entity.Database.SqlQuery
)中调用它时遇到了问题,重新排列存储过程中的表值参数+调用代码解决了这个问题! - James S