Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何在执行存储过程时使用变量作为参数?_Sql_Sql Server_Stored Procedures - Fatal编程技术网

Sql 如何在执行存储过程时使用变量作为参数?

Sql 如何在执行存储过程时使用变量作为参数?,sql,sql-server,stored-procedures,Sql,Sql Server,Stored Procedures,我已经声明并设置了一些变量。然后我想在执行存储过程时使用该变量值作为参数。但我总是犯错误 必须声明标量变量 以下是我的变量: --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)))

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

必须声明标量变量

以下是我的变量:

--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)'
是我的变量不正确吗?或者我使用变量作为参数的方法不对

更新:

如果执行此查询:

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
它工作正常,但如果我在。。声明这行不通。为什么会这样

更新二: 下面是我尝试运行的整个查询

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
在声明变量和调用执行存储过程之间,您是否有一段路要走?变量只在其作用域内可见-当您进入其中时,它会终止上一批/作用域并启动一个新的批/作用域-在新的批/作用域中,变量不再可见/声明

因此,请尝试以下方法:

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
在声明变量和调用执行存储过程之间,您是否有一段路要走?变量只在其作用域内可见-当您进入其中时,它会终止上一批/作用域并启动一个新的批/作用域-在新的批/作用域中,变量不再可见/声明

因此,请尝试以下方法:

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

sql似乎是正确的。您是在执行整个sql批处理还是只是在。。。语句?@praveen I正在执行整个sql批处理。我已经更新了我的问题以了解更多详细信息您是否需要在声明变量和调用执行存储过程之间进行转换?变量只在它们的作用域内可见-当你进入其中时,它会终止上一个批处理/作用域并启动一个新的批处理/作用域-而在新的批处理/作用域中,变量不再可见/声明…@blankon91:移除该GO,我想你应该没事了@blankon91:Go将sql命令分组到批处理中。您不能在一个批处理中定义一个变量,然后在另一个批处理中使用它。sql似乎是正确的。您是在执行整个sql批处理,还是只执行插入到。。。语句?@praveen I正在执行整个sql批处理。我已经更新了我的问题以了解更多详细信息您是否需要在声明变量和调用执行存储过程之间进行转换?变量只在它们的作用域内可见-当你进入其中时,它会终止上一个批处理/作用域并启动一个新的批处理/作用域-而在新的批处理/作用域中,变量不再可见/声明…@blankon91:移除该GO,我想你应该没事了@blankon91:Go将sql命令分组到批处理中。不能在一个批处理中定义变量并在另一个批处理中使用它