Sql server 游标从SQLServer2008上的每个表和字段中获取所有不同的值

Sql server 游标从SQLServer2008上的每个表和字段中获取所有不同的值,sql-server,sql-server-2008,cursor,Sql Server,Sql Server 2008,Cursor,我试图在SQLServer数据库上做一个游标,以从每个表中获取所有不同的值。 我希望具有值的表如下所示: Database Schema Table Field Value A dbo T1 F1 1 A dbo T1 F1 2 A dbo T1 F1 3 ... ... ... .

我试图在SQLServer数据库上做一个游标,以从每个表中获取所有不同的值。 我希望具有值的表如下所示:

 Database   Schema   Table   Field   Value
     A         dbo     T1     F1       1
     A         dbo     T1     F1       2
     A         dbo     T1     F1       3
    ...        ...     ...    ...     ...
我的问题是,当我试图用QUOTENAME(TABLE_CATALOG)输入数据库名时,它不会计算函数,而是将函数写入我要生成的表中。 我尝试了单引号/双引号,但没有结果

?我应该如何编写查询?谢谢

Set Nocount ON

DECLARE cur CURSOR FOR
SELECT 'SELECT DISTINCT ' + ''' QUOTENAME(TABLE_CATALOG) + '''+' As DBName,'+ + QUOTENAME(c.COLUMN_NAME) + ' AS Datos' + ' FROM ' + QUOTENAME(TABLE_CATALOG) + '.' + QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME)
FROM INFORMATION_SCHEMA.COLUMNS AS c
WHERE c.DATA_TYPE LIKE '%char%' 

DECLARE @cmd VARCHAR(MAX);
OPEN cur;

FETCH NEXT FROM cur INTO @cmd;
WHILE @@FETCH_STATUS = 0

BEGIN
PRINT @cmd
EXEC(@cmd);
FETCH NEXT FROM cur INTO @cmd;
END

CLOSE cur;
DEALLOCATE cur;

Set Nocount OFF

顺便说一句:我从一个示例()中获取了代码并对其进行了编辑()

您没有用
''QUOTENAME(TABLE_CATALOG)+''
正确地获得引号。它应该是
''+QUOTENAME(表目录)+'

引号通过将它们加倍来转义

SELECT 'blah' --> blah
SELECT 'it''s' --> it's
SELECT ' Alex''' + 's pen' -->  Alex's pen
语法错误

SELECT 'it's' --> syntax error
完成的查询如下:

SET NOCOUNT ON

DECLARE cur CURSOR FOR
SELECT 'SELECT DISTINCT ''' + QUOTENAME(TABLE_CATALOG) + ''' As DBName, ''' + QUOTENAME(TABLE_SCHEMA) + ''' AS [Schema], ''' + QUOTENAME(COLUMN_NAME) + ''' AS ColumnName, '
    +  QUOTENAME(c.COLUMN_NAME) + ' AS Datos ' +
    'FROM ' + QUOTENAME(TABLE_CATALOG) + '.' + QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME)
FROM INFORMATION_SCHEMA.COLUMNS AS c
WHERE c.DATA_TYPE LIKE '%char%' 

DECLARE @cmd VARCHAR(MAX);
OPEN cur;

FETCH NEXT FROM cur INTO @cmd;
WHILE @@FETCH_STATUS = 0

BEGIN
PRINT @cmd
EXEC(@cmd);
FETCH NEXT FROM cur INTO @cmd;
END

CLOSE cur;
DEALLOCATE cur;

SET NOCOUNT OFF
注:

  • 如果不希望字符串被
    []
    包围,请删除
    QUOTENAME
    (方形括号)
  • 信息\u SCHEMA.COLUMNS
    的注释:出于您的目的,此视图将返回中所述的正确数据(来自@ShannonSeverance的注释)。此视图缺少有关列属性的详细信息

您不应该使用信息模式视图来获取对象的模式。微软承认他们不可靠。关于模式和确定模式的信息:谢谢。。我不知道这不可靠。谢谢,它按预期工作!谢谢你对我提供的信息