积极答复者
sqlserver在存储过程中如何动态获取传入的参数值?

问题
-
现在有个存储过程
create proc up_test
@a varchar(10)='3',
@b varchar(10)='4
as
declare @s varchar(1000)
select @s='@a=3,@b=4'
print @s
-----想把@a和@b的参数值赋值给@s,如何实现呢?存储过程的参数不是固定的,而且传的值也不是固定的
比如 exec up_test '5','6' 则打印出来 @a='5',@b='6'
如果 exec up_test 'm','n' 则打印出来 @a='m',@b='n'
请大家看看有什么办法能实现到
答案
全部回复
-
我是这样写的,不过需要将传入的参数的形式是这样:exec up_test '5,6,1'
即是: up_test '参数1,参数2,参数3' 用逗号来分隔
不知道符不符合LZ的要求,需要创建一个字符串分割函数f_split,当然传入进去存储过程的参数是字符串
LZ可以分割开之后转换为其他类型
USE [pratice] GO --------------------------------- DROP FUNCTION [dbo].[f_split] GO CREATE FUNCTION f_split ( @SourceSql VARCHAR(8000) , @StrSeprate VARCHAR(10) ) RETURNS @temp TABLE ( ss VARCHAR(100) ) AS BEGIN DECLARE @i INT SET @SourceSql = RTRIM(LTRIM(@SourceSql)) SET @i = CHARINDEX(@StrSeprate, @SourceSql) WHILE @i >= 1 BEGIN INSERT @temp VALUES ( LEFT(@SourceSql, @i - 1) ) SET @SourceSql = SUBSTRING(@SourceSql, @i + 1, LEN(@SourceSql) - @i) SET @i = CHARINDEX(@StrSeprate, @SourceSql) END IF @SourceSql <> '\' INSERT @temp VALUES ( @SourceSql ) RETURN END ------------------------------------ CREATE proc up_test (@a varchar(100)) AS DECLARE @s VARCHAR(200) SET @s=' ' DECLARE @num INT DECLARE @increase INT DECLARE @temps VARCHAR(20) CREATE TABLE temptb(id INT IDENTITY(1,1) NOT NULL,para VARCHAR(20)) INSERT INTO temptb(para) SELECT ss FROM [f_split](@a,',') SELECT @num = COUNT(*) FROM temptb SET @increase = 1 WHILE @increase < @num +1 BEGIN SELECT @temps = para FROM temptb WHERE id = @increase; SET @s = @s +' 参数'+CAST(@increase AS VARCHAR(20))+': '+ @temps+';' SET @increase = @increase + 1 END SELECT @s DROP TABLE temptb exec up_test '库存,6,2013-6-12'
-
我是这样写的,不过需要将传入的参数的形式是这样:exec up_test '5,6,1'
即是: up_test '参数1,参数2,参数3' 用逗号来分隔
不知道符不符合LZ的要求,需要创建一个字符串分割函数f_split,当然传入进去存储过程的参数是字符串
LZ可以分割开之后转换为其他类型
USE [pratice] GO --------------------------------- DROP FUNCTION [dbo].[f_split] GO CREATE FUNCTION f_split ( @SourceSql VARCHAR(8000) , @StrSeprate VARCHAR(10) ) RETURNS @temp TABLE ( ss VARCHAR(100) ) AS BEGIN DECLARE @i INT SET @SourceSql = RTRIM(LTRIM(@SourceSql)) SET @i = CHARINDEX(@StrSeprate, @SourceSql) WHILE @i >= 1 BEGIN INSERT @temp VALUES ( LEFT(@SourceSql, @i - 1) ) SET @SourceSql = SUBSTRING(@SourceSql, @i + 1, LEN(@SourceSql) - @i) SET @i = CHARINDEX(@StrSeprate, @SourceSql) END IF @SourceSql <> '\' INSERT @temp VALUES ( @SourceSql ) RETURN END ------------------------------------ CREATE proc up_test (@a varchar(100)) AS DECLARE @s VARCHAR(200) SET @s=' ' DECLARE @num INT DECLARE @increase INT DECLARE @temps VARCHAR(20) CREATE TABLE temptb(id INT IDENTITY(1,1) NOT NULL,para VARCHAR(20)) INSERT INTO temptb(para) SELECT ss FROM [f_split](@a,',') SELECT @num = COUNT(*) FROM temptb SET @increase = 1 WHILE @increase < @num +1 BEGIN SELECT @temps = para FROM temptb WHERE id = @increase; SET @s = @s +' 参数'+CAST(@increase AS VARCHAR(20))+': '+ @temps+';' SET @increase = @increase + 1 END SELECT @s DROP TABLE temptb exec up_test '库存,6,2013-6-12'