IN 需要如下:
... IN (@param1, @param2, ...)
所以,你应该这样做:
SELECT DISTINCT Details from tbData WHERE Name IN (@svt) AND Address=@ser
更新:
您在问题中提供的 alter procedure 语句在语法上不正确。我的回答提供了编写语句的正确语法,并且可以编译。
再次阅读您的问题,我发现您实际上有两个问题。第一个是语法错误,第二个是在单个参数中传入逗号分隔列表。
答案是您根本无法在运行时将逗号分隔的值列表提供给IN (...) 子句中使用的单个字符串类型参数。现在,关于第二点,我认为这不是解决问题的好设计/编程方法,但可以使用动态 SQL 或解析字符串参数中的每个值,将它们存储到临时表中,然后修改您的查询加入到那个,或使用(或使用表值函数并将解析的项目存储在那里,可以从中查询。
以下是代码的更正语法,但它不能解决传递包含逗号分隔值列表的字符串的第二个方面。如上所述,这可以解决。
对于语法错误,首先,您可以创建一个虚拟表来测试您的代码。注意,一个典型的数据库表应该有一个主键。这严格来说是一个用于测试语句的虚拟表:
创建表 TbData(
名称 nvarchar(255),
详细信息 nvarchar(255),
地址 nvarchar(255)
);
然后,您可以创建初始存储过程:
创建过程测试
(
@ser nvarchar(255),
@svt nvarchar(255)
)
作为
开始
从 tbData WHERE Name IN (@ser) AND Address = @svt 中选择 DISTINCT 详细信息
结束
最后,执行您询问过的更改存储过程语句:
改变程序测试
(
@ser nvarchar(255),
@svt nvarchar(255)
)
作为
开始
从 tbData WHERE Name IN (@ser) AND Address = @svt 中选择 DISTINCT 详细信息
结束