составной идентификатор не может быть привязан

Я пытался использовать этот код для получения информации, связанной с базой данных.

сценарий---

DECLARE @USER_Name SYSNAME
DECLARE @Database_Name VARCHAR(255)
DECLARE @SQLQRY VARCHAR(2000)

DECLARE Database_Cursor CURSOR
FOR
SELECT '[' + NAME + ']' AS NAME
FROM master.dbo.sysdatabases
WHERE NAME IN ('Aaskiran')
ORDER BY NAME

OPEN Database_Cursor

FETCH NEXT
FROM Database_Cursor
INTO @Database_Name

WHILE @@FETCH_STATUS = 0
BEGIN
    PRINT 'Database:' + @Database_Name

    EXECUTE (
            'SELECT Type, COUNT(*) As Objects FROM
    ' + @Database_Name + '.dbo.sysobjects
    GROUP BY Type ORDER BY Type'
            )

    EXECUTE (
            'SELECT name As Table_Name FROM
    ' + @Database_Name + '.dbo.sysobjects
     WHERE type=''U'' ORDER BY name'
            )

    EXECUTE (
            'SELECT name As Stored_Proc_Name FROM
    ' + @Database_Name + '.dbo.sysobjects
     WHERE type=''P'' ORDER BY name'
            )

    DECLARE @Table_Name VARCHAR(255)

    EXECUTE (
            'DECLARE Table_Cursor CURSOR FOR SELECT name, USER_NAME(uid) FROM
    ' + @Database_Name + '.dbo.sysobjects
    WHERE type=''U'' ORDER BY name'
            )

    OPEN Table_Cursor

    FETCH NEXT
    FROM Table_Cursor
    INTO @Table_Name,
        @User_Name

    SET @SQLQRY = 'SELECT 
                       SUM (row_count) 
                   FROM sys.dm_db_partition_stats 
                   WHERE
                       object_id=OBJECT_ID(' + @Database_Name + '.[' + @User_Name + '].[' + @Table_Name + ']) 
                       AND (index_id=0  or index_id=1)'

    WHILE @@FETCH_STATUS = 0
    BEGIN
        EXECUTE (@SQLQRY)

        --EXECUTE('SELECT COUNT(*) AS ['+@Table_Name+'_Rows_Count] FROM '+@Database_Name+'.  ['+@User_Name+'].['+@Table_Name+']')
        --print('SELECT COUNT(*) AS ['+@Table_Name+'_Rows_Count] FROM '+@Database_Name+'.['+@User_Name+'].['+@Table_Name+']')
        FETCH NEXT
        FROM Table_Cursor
        INTO @Table_Name,
            @User_Name
    END

    CLOSE Table_Cursor

    DEALLOCATE Table_Cursor

    FETCH NEXT
    FROM Database_Cursor
    INTO @Database_Name
END

CLOSE Database_Cursor

DEALLOCATE Database_Cursor

но я получаю сообщение об ошибке

Сообщение 4104, уровень 16, состояние 1, строка 1 Не удалось связать составной идентификатор «AasKiran.##MS_PolicyEventProcessingLogin##.AADetails».

Я гуглил об этой ошибке, но большинство ссылок находятся на соединениях. Я не получаю проблему в своем запросе, так как я также не использовал псевдоним и не выполнял какое-либо соединение.


person Ravi    schedule 20.01.2014    source источник


Ответы (1)


Ваша ошибка заключается в том, что когда вы вызываете OBJECT_ID(), вы не заключаете имя таблицы в кавычки. Вы должны использовать:

SET @SQLQRY = 'SELECT 
                   SUM (row_count) 
               FROM sys.dm_db_partition_stats 
               WHERE
                   object_id=OBJECT_ID(''' + @Database_Name + '.[' + @User_Name + '].[' + @Table_Name + ']'') 
                   AND (index_id=0  or index_id=1)'

Хотя я все еще не совсем уверен, чего вы пытаетесь достичь.

person Steve Ford    schedule 20.01.2014
comment
Спасибо, Стив; да у меня ошибка. Ну, что я пытался сделать, так это подсчитать различные объекты базы данных до и после выполнения действия (определенные сценарии tsql, выполняемые над ним). И запрос работает сейчас. Спасибо. - person Ravi; 20.01.2014