2010-08-02 85 views
0

下面是從淨如何將打印變量保存到SQL Server中的另一個變量中?

declare @col varchar(255), @cmd varchar(max) 
DECLARE getinfo cursor for 
    SELECT c.name 
    FROM sys.tables t JOIN sys.columns c 
     ON t.Object_ID = c.Object_ID 
    WHERE t.Name = 'tblDeductions' 
    AND c.name like 'fld%name' OPEN getinfo 
FETCH NEXT FROM getinfo into @col 
WHILE @@FETCH_STATUS = 0 
    BEGIN 
     SELECT @cmd = 'IF EXISTS (SELECT top 1 * FROM tblDeductions WHERE [' 
      + @col + '] IS NOT NULL) BEGIN print '' 
      ' + @col + ''' end' exec (@cmd) 
     FETCH NEXT FROM getinfo into @col 
END CLOSE getinfo 
DEALLOCATE getinfo 

上面的查詢我的劇本搶將顯示爲空值的列名。但我需要用逗號分隔值將它們保存到另一個變量中。

在此先感謝。

回答

1

這應該可行,雖然幾乎可以肯定有更有效的方式來做你想做的事情。

IF OBJECT_ID('tempdb..#t') IS NOT NULL 
    DROP TABLE #t 

CREATE TABLE #t 
(columnName VARCHAR(255)) 

DECLARE @col VARCHAR(255), @cmd VARCHAR(MAX) 
DECLARE getinfo CURSOR FOR 
    SELECT c.name 
    FROM sys.tables t JOIN sys.columns c 
     ON t.Object_ID = c.Object_ID 
    WHERE t.Name = 'tblDeductions' 
    AND c.name LIKE 'fld%name' OPEN getinfo 
FETCH NEXT FROM getinfo INTO @col 
WHILE @@FETCH_STATUS = 0 
    BEGIN 
     SELECT @cmd = 'IF EXISTS (SELECT top 1 * FROM tblDeductions WHERE [' 
      + @col + '] IS NOT NULL) BEGIN INSERT #t VALUES (''' + @col + ''') end' 
      EXEC (@cmd) 
     FETCH NEXT FROM getinfo INTO @col 
END CLOSE getinfo 
DEALLOCATE getinfo 

DECLARE @columnsWithNull VARCHAR(MAX) 
SET @columnsWithNull = (SELECT columnName + ',' 
         FROM #t FOR XML PATH('')) 

SET @columnsWithNull = LEFT(@columnsWithNull,LEN(@columnsWithNull) - 1) 

SELECT @columnsWithNull