2012-07-31 309 views
1

我已经声明并设置了一些变量。然后我想使用该变量值作为执行存储过程的参数。但我总是得到错误如何在执行存储过程中使用变量参数?

必须声明标量变量。

这里是我的变量:

--declare variables for parameter @listweek 
declare @tgl_other varchar(50); 

--set variables for parameter @listweekset 
set @tgl_other = (select top 1 ltrim(rtrim(cast(numweek as char)))+'-('+rangeweek+')' from tbl_weeklyflash where year(dates) = year(getdate()) order by numweek desc); 

--the variable values should be like this 30-(01-03-2012 - 08-03-2012) 
--and this value that I want to use as parameter value in executing stored procedure 

,这是执行存储过程:

insert into my_table (field1, field2, field3) 
EXEC my_store_procedure @tgl_other 
-- the parameter for my_store_procedure is like '30-(01-03-2012 - 08-03-2012)' 

这是我的变量不正确?或者我错误的方式来使用变量的参数?

UPDATE:

如果我执行这个查询:

declare @tgl_other varchar(50); 
set @tgl_other = (select top 1 ltrim(rtrim(cast(numweek as char)))+'-('+rangeweek+')' from tbl_weeklyflash where year(dates) = year(getdate()) order by numweek desc); 
EXEC my_store_procedure @tgl_other 

它工作正常,但如果我添加INSERT INTO..声明它不会工作。为什么会发生?


UPDATE II: 这里是整个查询,我尝试运行

declare @tgl_other varchar(50); 
set @tgl_other = (select top 1 ltrim(rtrim(cast(numweek as char)))+'-('+rangeweek+')' from tbl_weeklyflash where year(dates) = year(getdate()) order by numweek desc); 
TRUNCATE TABLE mytable 
GO 
INSERT INTO mytable (field1, field2)  
EXEC my_store_procedure @tgl_other 
GO 
+0

sql似乎是正确的。你执行整个sql批处理还是只是插入到...语句? – praveen 2012-07-31 04:25:56

+0

@praveen我执行整个sql批处理。我已更新我的问题以获取更多详细信息 – blankon91 2012-07-31 04:36:55

+0

您可以发布您的SP吗? – praveen 2012-07-31 04:42:03

回答

5

你有一个GO某处声明变量和执行存储过程的调用之间?变量仅在它们的范围内可见 - 当您有GO时,终止上一批/范围并启动一个新变量 - 在新变量中,变量不再可见/不再声明。

所以试试这个:

declare @tgl_other varchar(50); 

set @tgl_other = (select top 1 ltrim(rtrim(cast(numweek as char)))+'-('+rangeweek+')' from tbl_weeklyflash where year(dates) = year(getdate()) order by numweek desc); 

TRUNCATE TABLE mytable 

-- GO  remove this GO to make it work! 

INSERT INTO mytable (field1, field2)  
EXEC my_store_procedure @tgl_other 
GO 
相关问题