Stored procedures 如何打印SQL Server 2008 R2中存储过程中传递的所有参数

Stored procedures 如何打印SQL Server 2008 R2中存储过程中传递的所有参数,stored-procedures,sql-server-2008-r2,Stored Procedures,Sql Server 2008 R2,我有一个存储过程,它接受varchar(max)类型的参数。我的用户应该能够传递单个参数以及多个参数(用逗号分隔)。如果传递了单个参数,则我的存储过程应打印单个值;如果传递了多个参数,则应打印多个值 例如,我的过程名是sp\u printvalue。如果我用一个参数执行这个过程 exec sp_printvalue A 它应该打印一个,如果我用多个参数执行它 exec sp_printvalue A,B,C,D 它应该打印所有值A B C D 请帮我完成这项任务。提前感谢。您可以传递一个xm

我有一个存储过程,它接受
varchar(max)
类型的参数。我的用户应该能够传递单个参数以及多个参数(用逗号分隔)。如果传递了单个参数,则我的存储过程应打印单个值;如果传递了多个参数,则应打印多个值

例如,我的过程名是
sp\u printvalue
。如果我用一个参数执行这个过程

exec sp_printvalue A
它应该打印一个,如果我用多个参数执行它

exec sp_printvalue A,B,C,D
它应该打印所有值A B C D


请帮我完成这项任务。提前感谢。

您可以传递一个xml参数,然后使用node方法读取它。这里有一个例子

create procedure usp_PrintValue
@param xml
as
set nocount on;

declare @result varchar(100)

select
    @result = coalesce(@result + ', ', '') + tab.col.value('@Value', 'char(1)')
from @param.nodes('/Parameter') as tab(col)

print @result
go
和执行

declare @a xml

set @a = N'
    <Parameter Value="A"/>
    <Parameter Value="B"/>
    <Parameter Value="C"/>
    <Parameter Value="D"/>
'

exec usp_PrintValue @a
declare@a xml
设置@a=N'
'
执行usp_打印值@a
旁注:您不应该在存储过程中使用
sp
前缀。微软已经这样做了,而且你确实有可能在将来的某个时候发生名称冲突。最好只是简单地避免使用
sp.
并使用其他东西作为前缀,或者根本不使用前缀!