我有一个概念性的'题。我理解如何使用参数创建一个简单的存储过程。
我现在的问题是,如何编写存储过程,使我想要SELECT ... FROM
的列是动态的。
示例运行1:我想仅通过
运行存储过程SELECT firstName, LastName
示例运行2:我只想通过
运行存储过程SELECT firstName, LastName, Department
每次运行存储过程时,我希望SELECT
列出的列都可以更改。
我有一个现有的存储过程(_SelectFromQry
),如下所示:
ALTER PROCEDURE [dbo].[_SelectFromQry]
@queryname NVARCHAR(255)
AS
BEGIN
SELECT TBLNAME, TBLCOL, TBLCOLLABEL, POSITION
FROM QRY
WHERE QUERYNAME = @queryname
END
上述程序的结果是'动态列'我想从另一张桌子SELECT
。
我不清楚如何根据' _SelectFromQry'的结果编写SELECT FROM another table的存储过程。它是否涉及创建某种列表参数'在哪里我会从@LIST中选择?
欣赏任何形式的帮助。
答案 0 :(得分:2)
您的概念问题有一个简单的概念性答案:不要这样做,至少对于传统的SQL Server。这种动态性打破了基于执行计划和统计的查询执行优化的内部机制。
答案 1 :(得分:1)
我想可能有简单的方法可以做到这一点,例如
ALTER PROCEDURE [dbo].[_SelectFromQry] @columns nvarchar(MAX), @filtercolumn1 NVARCHAR(10)
AS
BEGIN
DECLARE @query NVARCHAR (MAX)
SET @query = N'SELECT '+@columns+' FROM TABLE
WHERE column1 = '+@filtercolumn1
EXECUTE sp_executesql @query
END
执行
EXEC _SelectFromQry 'Column1,Column2,...', 'A'