我是一個較新的SQL,我負責重構這段代碼。當我看到這個時,我想吐。如何添加一個循環到一個SQL SELECT
我試圖修改這個sproc,以便它可以返回任意數量的列而不是固定的數字。以下是它現在的樣子。
ALTER PROCEDURE [frsuser].[usp_report_UnitFeatureHeaders]
AS
BEGIN
CREATE TABLE #features (SortOrder INT IDENTITY(1,1)
,label NVARCHAR(20) )
INSERT INTO #features (label)
SELECT label FROM UnitAttributeDefinition order by tab_sort_order
SELECT 'UnitID' AS UnitID
,'UnitName' AS UnitName
,'UnitAddress' AS UnitAddress
,'RateUnitType' AS RateUnitType
,'TaxDistrict' AS TaxDistrict
,'ContractType' AS ContractType
,'InactiveUnit' AS InactiveUnit
,(SELECT ISNULL(label,'') FROM #features WHERE SortOrder = 1) AS Feature01
,(SELECT ISNULL(label,'') FROM #features WHERE SortOrder = 2) AS Feature02
,(SELECT ISNULL(label,'') FROM #features WHERE SortOrder = 3) AS Feature03
,(SELECT ISNULL(label,'') FROM #features WHERE SortOrder = 4) AS Feature04
.......
,(SELECT ISNULL(label,'') FROM #features WHERE SortOrder = 100) AS Feature100
DROP TABLE #features
END
下面是我想要的樣子。
ALTER PROCEDURE [frsuser].[usp_report_UnitFeatureHeaders]
@numberOfFeatures Int = 100
AS
BEGIN
CREATE TABLE #features (SortOrder INT IDENTITY(1,1)
,label NVARCHAR(20) )
INSERT INTO #features (label)
SELECT label FROM UnitAttributeDefinition order by tab_sort_order
DECLARE @counter INT = 0;
DECLARE @featureName NVARCHAR (20) = 'Feature';
SELECT 'UnitID' AS UnitID
,'UnitName' AS UnitName
,'UnitAddress' AS UnitAddress
,'RateUnitType' AS RateUnitType
,'TaxDistrict' AS TaxDistrict
,'ContractType' AS ContractType
,'InactiveUnit' AS InactiveUnit
(WHILE @counter < @numberOfFeatures
BEGIN
SET @featureName = 'Feature' + @counter;
(SELECT ISNULL(label,'') FROM #features WHERE SortOrder = @counter)
END
) AS @featureName
DROP TABLE #features
END
就是這樣一個重構甚至可能嗎?如果是這樣,它會是什麼樣子?
您只能使用動態sql和STUFF爲您的功能列實現此功能 – maSTAShuFu
每當我在SQL問題中聽到LOOP ,我想吐了。 –