我想设计一个动态存储过程,我将传递列名、表名和我的where子句。这样我就可以使用存储过程在不同的表上用不同的参数进行选择。
我不知道这是否可行。如果可以,任何人都可以用例子来帮助我。
例如
查询1:查询1。Select name, number, total into out_name, out_number, out_total from student where total > 100;
查询2: select book into out_book from lib where cost > 100;
我应该能够在单一存储过程中执行上述查询,通过传入... column
, table
和 where
子句。
我创建了像下面这样的东西。我做了类似这样的删除,删除工作正常。
SET V_SELECT =
'SELECT ' || SELECT_FIELDS ||
' FROM ' || TABLE_NAME ||
' WHERE ' || WHERE_CLAUSE ||
' WITH UR';
EXECUTE IMMEDIATE V_SELECT INTO || INTO_FIELDS ||;
CREATE PROCEDURE usp_DynamicProc
(
@SelectFields NVARCHAR(1024)
, @IntoTableName NVARCHAR(255)
, @TableName NVARCHAR(255)
, @WhereClause NVARCHAR(1024)
)
AS
DECLARE @SQL NVARCHAR(MAX)
SELECT @SQL = 'SELECT ' + @SelectFields + ISNULL(' INTO ' + @IntoTableName,'') + ' FROM ' + @TableName + ' WHERE ' + @WhereClause
EXEC sp_executesql @SQL