0
我試圖顯示那些具有值的列,但代碼顯示每列。 if語句被忽略不知道什麼是做錯了。 有兩張表Person_Permission和Person。我選擇Person_Permission中具有值的所有列,在獲取那些列名後,我使用這些列從Person表中進行選擇。想要僅顯示具有值的列
USE [exampleProject]
GO
/****** Object: StoredProcedure [dbo].[list_col_notNull] Script Date: 2016/04/18 11:53:51 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[list_col_notNull](@username VARCHAR(20))
AS
DECLARE @col VARCHAR(255), @cmd VARCHAR(MAX)
SELECT * INTO #table FROM Person_Permissions
WHERE userName = @username
DECLARE getinfo CURSOR FOR
SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'Person_Permissions'
SET @cmd = 'SELECT '
OPEN getinfo
FETCH NEXT FROM getinfo into @col
WHILE @@FETCH_STATUS = 0
BEGIN
IF EXISTS(SELECT TOP 1 * FROM #table WHERE @col IS NOT NULL)
BEGIN
SET @cmd = @cmd + RTRIM(@col) + ','
END
FETCH NEXT FROM getinfo into @col
END
CLOSE getinfo
DEALLOCATE getinfo
SET @cmd = LEFT(@cmd, LEN(@cmd) -1) + ' FROM [Person]'
select * from #table
EXEC(@cmd)
SELECT(@cmd)
什麼是最終目標?你不能隱藏顯示層中的空列而不是生成動態SQL嗎?還是你正在處理一個沒有正確數據標準化的糟糕結構? –
您可以添加一些示例數據和預期輸出(以及預期/實際生成的查詢)嗎?你正在從'Person_Permissions'中選擇列,並且你最終的查詢從'Person'中選擇,是否正確? – HoneyBadger
'SELECT TOP 1 * FROM #table WHERE @col IS NOT NULL' - 計算'@ col'變量,它永遠不會爲null。也許你還需要一些動態查詢。但是這會變得臃腫。也許你會更好地隱藏不同應用程序層的列。 – Horia