您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

将动态参数传递给SQL Server 2008中的存储过程

将动态参数传递给SQL Server 2008中的存储过程

还不清楚包装程序的目的是什么(审计或调试),这似乎是一个很尴尬的解决方案。如果您解释为什么要执行此操作,那么某人可能会有完全不同的解决方案,并且希望更好。

提案的最大问题是只能将参数作为字符串传递,这意味着您必须处理动态SQL附带的所有转义,数据转换/格式设置和sql注入问题。最好直接调用每个过程,并从调用代码中传递正确键入的参数。

说了这么多,如果您真的想这样做,那么您可以做这样的事情:

create proc dbo.ExecuteProcedure
    @ProcedureName sysname,
    @Parameters nvarchar(max),
    @Debug bit = 0x0,
    @Execute bit = 0x1
as
set nocount on
begin

declare @sql nvarchar(max)
set @sql = 'exec ' + quotename(@ProcedureName) + ' ' + @Parameters

if @Debug = 0x1 print @sql

if @Execute = 0x1 exec(@sql)

end
go

exec dbo.ExecuteProcedure 'dbo.someProc', '@p1 = 1, @p2 = ''themhz''s proc''', 0x1, 0x0

您还应该查看一下sp_executesql,它几乎可以完全满足您的要求,但是它也需要具有所有参数数据类型,这在您的方案中是不可能的。

SQLServer 2022/1/1 18:52:47 有288人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶