2014-01-20 83 views
0

我正在尝试使用此代码来获取数据库相关信息。多部分标识符无法绑定

剧本---

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 ['[email protected]_Name+'_Rows_Count] FROM '[email protected]_Name+'. ['[email protected]_Name+'].['[email protected]_Name+']') 
     --print('SELECT COUNT(*) AS ['[email protected]_Name+'_Rows_Count] FROM '[email protected]_Name+'.['[email protected]_Name+'].['[email protected]_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,行 多部分标识符“AasKiran。 ## MS_PolicyEventProcessingLogin ##。AADetails“无法绑定。

我对此错误进行了搜索,但大多数链接都在连接上。我没有在我的查询中遇到问题,因为我还没有使用任何别名或进行任何类型的连接。

回答

2

你的错误是当你打电话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)' 

虽然我还不太清楚你想达到什么。

+0

谢谢史蒂夫;雅我得到了错误。那么我想要做的是在活动之前和之后(特定的tsql脚本运行)对数据库的不同实体进行计数。 现在查询正在运行。 谢谢。 – Ravi

相关问题