【发布时间】:2013-10-21 17:50:20
【问题描述】:
我创建了这样的表值参数:
CREATE TYPE dbo.ss AS TABLE(ss1 NVARCHAR(5));
然后我这样写了我的存储过程:
ALTER PROCEDURE [dbo].[T_TransactionSummary]
@locations dbo.ss readonly
as
begin
...............
.............
AND (Location_tbl.Locid IN (@locations))
执行此操作时出现错误:
必须声明标量变量“@locations”。
我的存储过程出了什么问题
【问题讨论】:
-
我从来没有使用过这些,但是你不需要从那个参数中选择,因为类型是一个 TABLE 结果?
-
试试:
AND (Location_tbl.Locid IN (select ss1 from @locations)) -
如上所述。您可以通过 JOIN 来实现相同的方法。
-
是的,我错过了 OP 中的第一行。顺便说一句,我删除评论,因为你已经得到了答案。
-
为什么是
dbo.ss(ss1)?这些根本不是很有用或有意义的名字。为什么NVARCHAR(5)而不是INT?如果值大于 5 个字符怎么办?为什么它需要是 Unicode?在你的另一个问题中,你说这些是整数,对吧?
标签: sql-server table-valued-parameters