脑子抽筋了 2014-05-07 10:08 采纳率: 0%
浏览 793

在一个服务器上访问另一个服务器出现的问题

if exists(select 1 from master..sysservers where srvname='srv_lnk2')
exec sp_dropserver 'srv_lnk2','droplogins'

go

--创建链接服务器

exec sp_addlinkedserver 'srv_lnk2','','SQLOLEDB','192.168.0.99'
--这步提示“不能在具有唯一索引 'sysxlogins' 的对象 'sysxlogins' 中插入重复键的行。 ”

exec sp_addlinkedsrvlogin 'srv_lnk2','false',null,'sa','147258'

go

--查询示例

select * from srv_lnk.slm.dbo.by_mz_yb_project

--以后不再使用时删除链接服务器

exec sp_dropserver 'srv_lnk2','droplogins'
-----这步提示“未能在 sysdatabases 中找到数据库 'distribution' 所对应的条目。没有找到具有该名称的条目。请确保正确地输入了名称。”
go

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-02 01:33
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    这段代码应该可以解决你提到的问题。首先,我将解释一下SQL语句的作用:

    • if exists(select 1 from master..sysservers where srvname='srv_lnk2'):检查是否存在名为srv_lnk2的系统服务器。
    • exec sp_dropserver 'srv_lnk2','droplogins':如果存在名为srv_lnk2的系统服务器,则执行drop server命令,并删除所有连接登录。

    接下来是问题中提到的两个错误:

    • 第一个错误:exec sp_dropserver 'srv_lnk2','droplogins':无法在具有唯一索引 'sysxlogins' 的对象 'sysxlogins' 中插入重复键的行。这是因为你需要先创建一个新的表来存储你的数据,然后才能删除旧的数据。
    • 第二个错误:go:这一步骤不会执行任何操作,因为它是一个Go语言中的语法结构,用于表示脚本的结束。

    为了修复这些问题,你可以按照以下步骤进行操作:

    1. 创建新的表并填充数据,以便于删除旧的数据:
    CREATE TABLE new_xlogins (
        login_id INT PRIMARY KEY,
        username VARCHAR(50),
        password VARCHAR(50)
    );
    
    INSERT INTO new_xlogins (login_id, username, password) VALUES
    (1, 'sa', '147258'),
    (2, 'test', 'testpassword');
    
    1. 删除旧的数据(注意,这里使用的DROP命令会永久删除数据,如果你不需要这些数据,建议先备份):
    DELETE FROM sysxlogins WHERE login_id = 1;
    DELETE FROM sysxlogins WHERE login_id = 2;
    
    1. 检查是否已经成功删除旧的数据:
    SELECT COUNT(*) FROM sysxlogins WHERE login_id = 1;
    SELECT COUNT(*) FROM sysxlogins WHERE login_id = 2;
    

    以上步骤应该能够解决你的问题。如果你还有其他疑问或需要进一步的帮助,请随时提问!

    评论

报告相同问题?