CREATE PROCEDURE Testing1
@Varaible nvarchar(50),
@value integer
AS
BEGIN
DECLARE @SUMM FLOAT
SET @SUMM=(@value*2.38/7.456)*2
PRINT @Varaible
PRINT 'EXPENSES IS'
PRINT @SUMM
END
Output is:
PETER
EXPENSES IS
24.2597
以上是我传递单个输入参数的代码。
如果我想传递多个值,例如peter,robber,licoln,mat
@varaible peter,robber,licoln,mat
@value 37 45 66 77
是不是可以在SQL ??
答案 0 :(得分:2)
如果您只在分隔字符串中发送一些值,我建议您只使用正确的数据类型并使用单个值调用存储过程几次。
但是,如果您的分隔字符串可能包含数百或数千个离散值,那么在性能方面多次调用proc可能会很昂贵,特别是如果您不能一次性发送它们(我是确定你想使用参数而不是一个巨大的连接命令)。如果是这种情况,您可以选择以下几种方法:
答案 1 :(得分:0)
表值参数方法似乎非常“平易近人”,但仅在MSSQL 2008中可用。如果您仍然坚持使用MSSQL 2005,那么,临时表方法最适合您吗?
您的代码可能类似于:
-- define your stored procedure
CREATE PROC sptest1 AS
BEGIN
-- do some stuff with #tmp, like join it to other tables
-- and UPDATE values in these tables with it!
-- or simply list a processed version of #tmp:
SELECT nam,val*(2.38/7.456)*2 FROM #tmp
END
-- prepare input values by creating a temporary table on the fly
SELECT 'Peter' nam,23 val INTO #tmp
UNION ALL SELECT 'Paul',27
UNION ALL SELECT 'Harry',16
UNION ALL SELECT 'Mary-Ann',45;
-- and call the procedure:
EXEC sptest1
因此,您的前端必须构建SELECT ... INTO #tmp ...
字符串。之后,其余的处理可以在您的存储过程中完成。