Stored procedures SQLServer2005中的动态存储过程

Stored procedures SQLServer2005中的动态存储过程,stored-procedures,Stored Procedures,是否可以在sql server 2005中编写带有动态参数的存储过程?否,计数和参数类型作为存储过程声明的一部分是固定的。从技术上讲否,但有一个解决方法:临时表。创建临时表,然后设置存储过程以从临时表读取其配置 下面是一个如何调用它的示例: CREATE TABLE #inputParams (ParamName VARCHAR(20), ParamValue VARCHAR(20)) INSERT INTO #inputParams (ParamName, ParamValue) VALUES

是否可以在sql server 2005中编写带有动态参数的存储过程?否,计数和参数类型作为存储过程声明的一部分是固定的。

从技术上讲否,但有一个解决方法:临时表。创建临时表,然后设置存储过程以从临时表读取其配置

下面是一个如何调用它的示例:

CREATE TABLE #inputParams (ParamName VARCHAR(20), ParamValue VARCHAR(20))
INSERT INTO #inputParams (ParamName, ParamValue) VALUES ('First Name', 'John')
INSERT INTO #inputParams (ParamName, ParamValue) VALUES ('Last Name', 'Doe')
EXEC dbo.USP_MyStoredProcedure
然后,在存储过程中,您可以通过检查临时表的存在并从中查询参数来检索所需的任何参数,如下所示:

CREATE PROCEDURE dbo.USP_MyStoredProcedure AS
DECLARE @FirstName VARCHAR(20)
SET @FirstName = SELECT ParamValue FROM #inputParams WHERE ParamName = 'First Name'
GO
这样,存储过程的参数数量永远不会改变,这使得一些开发应用程序更容易随时间调用它,但这确实很危险。从存储过程的外部,您永远不知道您正在调用的存储过程的版本,以及它是否与您发送的参数有关


相反,您可能会考虑将存储过程抽象到另一个存储过程中作为包装器。

如果有一组离散的参数,您可以将它们作为XML传递到存储过程中。然后可以将XML分解为存储过程主体内的变量,例如

CREATE PROCEDURE MyDynamicStoredProc  
@ParameterXML XML
AS

SET NOCOUNT ON

DECLARE @Parameter1 NVARCHAR(50)
DECLARE @Parameter2 INT

SET @Parameter1 = @ParameterXML.value('/Root/Parameters/StringParameter/@Value','nvarchar(50)')
SET @Parameter2 = @ParameterXML.value('/Root/Parameters/IntegerParameter/@Value','int')
...

注意:我的XQuery fu很弱,不要依赖这个例子

投了赞成票,但亲爱的上帝,那是邪恶的:)我不得不分析一个到处都是这样的系统——这几乎是不可能的。谢谢,是的,你是对的,这是邪恶的。我试着用我的力量做好事。我从未受到足够的诱惑,在生产环境中实际部署这样的代码,哈哈哈。