2010-08-02 89 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