【问题标题】:Could not find server 'dbo' in sys.servers.?在 sys.servers 中找不到服务器“dbo”。?
【发布时间】:2013-10-30 13:37:20
【问题描述】:

我的 SQL 在这个问题上遇到了问题,我已经从 sys.servers 中选择 * 以检查我的服务器是否已列出。

我还完成了从 sys.servers 中选择名称的查询,并列出了我的服务器名称。

这是我的代码

    declare @Source_Database_Name AS varchar(255) = 'dbo.Production2'
declare @Destination_Database_Name AS varchar(255) = 'c365online_script1'

declare @Company_Id AS int = 1 --declare a companyid 

CREATE TABLE #CompanyID1 (ID bigint)

INSERT INTO #CompanyID1(ID)
VALUES('1')

--FIRST CURSOR LOOP THROUGH THIS TABLE
CREATE TABLE #TableList (
processorder int,
tablename NVARCHAR(100)
)

INSERT INTO #TableList (processorder, tablename )
VALUES
(1, 'tCompany');

DECLARE @firstLoop BIT
--SET @firstLoop = true
DECLARE @Counter INT  -- counting variable

----------- Cursor specific code starts here ------------
-- company cursor
declare copyCompanyDataCursor CURSOR fast_forward FOR
SELECT ID from #CompanyID1;

open copyCompanyDataCursor
fetch next from copyCompanyDataCursor into @Company_Id;

WHILE @@FETCH_STATUS = 0
    BEGIN

        declare @processorder int;
        declare @tablename varchar(500);
        -- table cursor

        declare copyTableDataCursor CURSOR fast_forward FOR
        SELECT processorder,tablename from #TableList order by processorder;

        open copyTableDataCursor
        fetch next from copyTableDataCursor into @processorder, @tablename;

        WHILE @@FETCH_STATUS = 0
        BEGIN
            SET IDENTITY_INSERT [c365online_script1].[dbo].[tCompany] ON

            -- Does the table have a companyID column? if statement checking for company id
            IF EXISTS(SELECT *  FROM Production2.INFORMATION_SCHEMA.COLUMNS 
                WHERE COLUMN_NAME='CompanyID' and TABLE_NAME='tProperty')
                    BEGIN
                    declare @debug varchar(max)
                          EXEC('INSERT INTO ' + @Destination_Database_Name + '.dbo.' + @tablename + ' SELECT * FROM ' + @Source_Database_Name + '.dbo.' + @tablename + ' WHERE ' + @Source_Database_Name + '.dbo.' + @tablename + '.CompanyID = ' + @Company_Id )
                    END
                            ELSE
                    BEGIN 
                            Print 'No'
                    END 
            -- if yes then copy data based on companyID in cursor



            -- if no check if this is the first time through company loop and copy all data
            -- if @firstloop company exists look at information schema

                    -- insert into c365online_script1.dbo.tCompany(selec
    EXEC('INSERT INTO ' + @Destination_Database_Name + '.dbo.' + @tablename + ' SELECT * FROM ' + @Source_Database_Name + '.dbo.' + @tablename )

                    -- company logic


        SET IDENTITY_INSERT [c365online_script1].[dbo].[tCompany] OFF

            FETCH NEXT FROM copyTableDataCursor into @processorder,@tablename;
        END

        close copyTableDataCursor;

        Deallocate copyTableDataCursor;

--INSERT INTO c365online_script1.dbo.tCompany
--SELECT *
--FROM production2.tCompany
--WHERE ISNULL(CompanyID, 0) = 0  -- copy all data where id is equal to zero
--@Destination_Database_Name

--      
        --EXEC(INSERT  + @Destination_Database_Name + '.dbo.' + @tablename + ' SELECT * FROM ' + @Source_Database_Name + '.dbo.' + @tablename + ' WHERE ' + @Source_Database_Name + '.dbo.' + @tablename + '.CompanyID = ' + @Company_Id + ')')     
        --SET @firstLoop = false;
        FETCH NEXT FROM copyCompanyDataCursor into @Company_Id;
    END

CLOSE copyCompanyDataCursor;
DEALLOCATE copyCompanyDataCursor;

【问题讨论】:

    标签: sql sql-server tsql sql-server-2005 syntax-error


    【解决方案1】:

    你的代码的第一行是

    declare @Source_Database_Name AS varchar(255) = 'dbo.Production2'
    

    您的数据库实际上是否称为dbo.Production2

    如果是这样,您在使用该名称时将需要方括号。即引用它为[dbo.Production2]

    这是一个相当混乱的数据库名称dbo 也是默认架构。因此,通常您希望看到它出现在数据库名称之后。以前没有。

    【讨论】:

    • 是的,当我执行 [dbo.Production2] SQL 说列名无效时,我的数据库名称是 Production2
    • @user2520671 - 你还没有回答马丁问的问题。 Martin 询问您的数据库是否称为 dbo.Production2 - 您已经回答“是的,它被称为 Production2” - 您没有意识到这两个字符串不一样吗?
    • 数据库的名字就是Production2
    • @user2520671 - 那么为什么要分配值dbo.Production2?您实际上有一个名为“dbo”的链接服务器吗? (再次会令人困惑!)
    • 那么如果你把它改成declare @Source_Database_Name AS varchar(255) = 'Production2' 那么问题就解决了吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-18
    • 2021-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-11
    • 1970-01-01
    相关资源
    最近更新 更多