【发布时间】:2016-10-17 18:52:45
【问题描述】:
以下存储过程动态确定指定表中的列并返回所有非空列,但是存储过程返回空,尽管在自行测试动态查询时返回结果,我是否正在处理动态查询正确返回结果?
CREATE PROCEDURE [dbo].[spGetTables]
(
@TableName varchar(255)
,@ParamOut varchar(2000) OUTPUT
)
AS
declare @CommaString varchar(max)
set @CommaString = ''
Declare @col varchar(255), @cmd nvarchar(max)
declare @colName varchar(2000)
SET @colName = ''
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 = @TableName
OPEN getinfo
FETCH NEXT FROM getinfo into @col
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT @cmd = 'IF NOT EXISTS (SELECT top 1 * FROM [' + @TableName + '] WHERE [' + @col + '] IS NULL or len([' + @col + ']) < 1) BEGIN select ''' + @col + ','' END'
exec sp_executesql @cmd, N'@Result varchar(max) out', @ParamOut out
set @ParamOut = @ParamOut + @CommaString
FETCH NEXT FROM getinfo into @col
END
PRINT 'Result: '+@ParamOut
CLOSE getinfo
DEALLOCATE getinfo
RETURN 0
【问题讨论】:
标签: sql-server sql-server-2008 tsql stored-procedures dynamic-sql