具有选择语句,执行动态SQL和返回值的表

Mar*_*tin 6 sql sql-server sql-server-2005 dynamic-sql

我有一个select语句,它返回一个充满SELECT语句的表(它遍历每个表中的每一列,并创建一个select来查找该列是否包含任何错误数据).

我需要将此表充满SELECT语句,执行它们,并查看它们是否返回行.如果count(*)> 0,那么我想打印出一些数据.

我以为我必须使用光标,但我不知道如何实现这一目标.

这是我的代码来获取坏数据的计数.

SELECT 'SELECT count(*),  '' '+sysobjects.name + ' - ' + syscolumns.name + 
    ' '' FROM ['
         +sysobjects.name + '] WHERE UNICODE(SUBSTRING(['+syscolumns.name+'],Len(['+syscolumns.name+']),1)) = 0' 
         FROM sysobjects 
    JOIN syscolumns ON sysobjects.id = syscolumns.id
    JOIN systypes ON syscolumns.xtype=systypes.xtype
   WHERE sysobjects.xtype='U' and systypes.name IN ('varchar', 'nvarchar')
ORDER BY sysobjects.name,syscolumns.colid
Run Code Online (Sandbox Code Playgroud)

这将返回一个包含以下行的表:

SELECT count(*),  ' All_MW_Users - LastName ' FROM [All_MW_Users] WHERE UNICODE(SUBSTRING([LastName],Len([LastName]),1)) = 0
Run Code Online (Sandbox Code Playgroud)

我需要执行这个select,如果count(*)> 0,则打印第二列. 除非有数据要显示,否则我不想在结果或消息中显示任何内容.

KM.*_*KM. 3

尝试这个:

DECLARE @SQL nvarchar(max)
SET @SQL='DECLARE @TempTable table (RowID int identity(1,1), CountOf int, DescriptionOf nvarchar(500));'
SELECT @SQL=@SQL+';INSERT @TempTable (CountOf,DescriptionOf ) SELECT count(*),  '' '+sysobjects.name + ' - ' + syscolumns.name + 
    ' '' FROM ['
         +sysobjects.name + '] WHERE UNICODE(SUBSTRING(['+syscolumns.name+'],Len(['+syscolumns.name+']),1)) = 0' 
         FROM sysobjects 
    JOIN syscolumns ON sysobjects.id = syscolumns.id
    JOIN systypes ON syscolumns.xtype=systypes.xtype
   WHERE sysobjects.xtype='U' and systypes.name IN ('varchar', 'nvarchar')
ORDER BY sysobjects.name,syscolumns.colid

SET @SQL=@SQL+';SELECT * FROM @TempTable WHERE CountOF>0' --make sure there is no truncation of the commands

EXEC (@SQL)
Run Code Online (Sandbox Code Playgroud)

  • @KM,你很方便地省略了那句话的其余部分。请允许我为您完成它:“...并查看其中是否有任何返回行。如果 count(*) > 0,那么我想打印一些数据。` 您有可能为福克斯新闻工作吗? (2认同)