如何使用MS SQL 2005将存储过程的参数值传递给临时表?

时间:2016-08-24 11:41:07

标签: sql stored-procedures sql-server-2005 parameters

我需要将程序的acutal参数值存储到临时表中。 我试图创建一个可以应用于不同存储过程的脚本,因此脚本不能包含参数的名称。 出于格式化原因,我无法添加scipt。让我用语言解释。

我有一个带有ParameterName和ParameterValue列的临时表 我使用表格sys.parameters插入了参数名称 在SP中,我尝试使用调用SP的参数值更新临时表ParameterValue。 我逐个为每个参数创建了动态SQL,我使用@ParameterName变量来保存行中的参数 但是我无法将参数的值(@ParameterName中给定参数的名称)添加到动态SQL

还尝试了SP_EXECUTESQL

请帮助解决这个问题。

2 个答案:

答案 0 :(得分:0)

如果使用动态查询而不是#temp表,请使用## temp table或permanent table。这可以解决您的问题。

答案 1 :(得分:0)

这将为您提供所有程序,参数及其参数类型。如果你想要它成为一个临时你可以删除注释掉的部分。此外,如果您只想要一个过程,那么您可以set @ProcName到该过程的名称。

declare @ProcName varchar(4000) = null
select 
    o.name as ProcName,
    p.name as ParamName,
    t.name as ParamType
--into #someTemp
from 
    sys.objects o
inner join
    sys.parameters p on p.object_id = o.object_id
inner join
    sys.types t on t.system_type_id = p.system_type_id
where
    o.type = 'P'
    and @ProcName is null or o.name = @ProcName

根据您的评论进行更新

---------------------------------------------------------
--create a global temp
--Remember SQL will clean up (remove) your temp when it wants
---------------------------------------------------------

create table ##someTemp(
    DT datetime,
    ProcName varchar(256),
    ParamName varchar(128),
    ParamType varchar(128),
    Val varchar(256)) 
go

---------------------------------------------------------
--create the procedure
---------------------------------------------------------

create procedure [dbo].[usp_test_param_insert] (@int char(1), @someString varchar(256))
as

insert into ##someTemp (DT,ProcName,ParamName, ParamType, val) values
(getdate(),'usp_test','@int','int',@int),
(getdate(),'usp_test','@someString','varchar(256)',@someString)


select @int, @someString


GO


---------------------------------------------------------
--call the proc a few times... i put the delay so you
--can see the time stamp changing
---------------------------------------------------------


exec usp_test_param_insert 1,'first string' 
WAITFOR DELAY '00:00:05'
exec usp_test_param_insert 2,'second string' 
WAITFOR DELAY '00:00:05'
exec usp_test_param_insert 3,'third string' 

---------------------------------------------------------
--See your results
---------------------------------------------------------

select * from ##someTemp