the*_*mhz 2 sql sql-server stored-procedures sql-server-2008
我有这个过程执行参数及其参数datefrom和传递的另一个过程dateto.
CREATE procedure [dbo].[execute_proc]
@procs varchar(200),
@pdatefrom date,
@pdateto date
as
exec @procs @datefrom=@pdatefrom,@dateto=@pdateto
Run Code Online (Sandbox Code Playgroud)
但我还需要动态传递参数,而无需在过程中编辑它们.例如,我想象的是这样的
CREATE procedure [dbo].[execute_proc]
@procs varchar(200),
@params varchar(max)
as
exec @procs @params
Run Code Online (Sandbox Code Playgroud)
@params字符串在哪里@param1=1,@param2='somethingelse'
有没有办法做到这一点?
你的包装程序的重点是什么(审计?调试?)并不是很清楚,这似乎是一个非常尴尬的解决方案.如果你解释为什么要这样做,有人可能会有一个完全不同的,希望更好的解决方案.
您的提议最大的问题是您只能将参数作为字符串传递,这意味着您必须处理动态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
Run Code Online (Sandbox Code Playgroud)
您还应该看一下sp_executesql,它几乎完全符合您的要求,但它也需要包含所有参数数据类型,您认为在您的方案中这是不可能的.
| 归档时间: |
|
| 查看次数: |
30924 次 |
| 最近记录: |