to 蝈蝈俊 联结服务器最好不要动态建立效率不好,且也没有必要,你的服务器又不是手提要不你可以做成界面,连远程服务名、用户名、密码由界面输入如果你坚持你可以建立##全局临时表如: 每次调用的时候看看它是否存在:if not exists(select 1 from master.dbo.sysservers where srvname = 'server1') begin EXEC sp_addlinkedserver 'server1','','MSDASQL',NULL,NULL,@connstrto21 create table ##全局临时表(flag int identity(1,1)) --如果不在就建立临时表 end insert ##全局临时表 default values --插入一条......你的复杂运算 delete ##全局临时表 where id=(select min(id) from ##全局临时表)if (select count(*) from ##全局临时表)=0 begin exec sp_droplinkedsrvlogin 'server1','sa' exec sp_dropserver 'server1' drop table ##全局临时表 end
用sp_addlinkedserver 建立的连接,什么时间会自动释放???是不是不会自动释放??(数据库从起这些不算)那么我需要连接的地方都用: if not exists(select 1 from master.dbo.sysservers where srvname = 'server1') begin EXEC sp_addlinkedserver 'server1','','MSDASQL',NULL,NULL,@connstrto21 end 同时我不释放,是不是就会只有一个连接???其他请求的时候,也是用的这个连接???
sp_addlinkedserver 建立的连接服务器,不会自动释放,包括重启,注意sp_addlinkedserver建立的是链接的服务器。 至于每次访问的连接,是怎么释放,没有研究过,不过我想,既然是通过OLE DB 连接的,会自动释放的
to : ghj1976(蝈蝈俊.net) 我指的是在程序中做指针 :),不是在SQL中,SQL只有游标,没有指针触发器是用也是用SQL代码实现的,表可以触发,代码之间也可以,但我自己不会写,我用的时间是抄我以前朋友给我的,按照他给我的框架改动一下而已。
另外,还有个问题。建立连接后, 执行远程服务器的数据库的存储过程(或者函数)如何写??CREATE PROCEDURE dbo.test AS declare @connstrto21 varchar(200) declare @str nvarchar(200) select @connstrto21 = dbo.getconnstr() if not exists(select 1 from master.dbo.sysservers where srvname = 'server1') EXEC sp_addlinkedserver 'server1','','MSDASQL',NULL,NULL,@connstrto21这里如何写??? exec server1.database1.dbo.procedure1 参数1,参数2 output 这样写不行呀。exec sp_droplinkedsrvlogin 'server1','sa' exec sp_dropserver 'server1' go
如果用: exec server1.database1.dbo.procedure1 参数1,参数2 output方式来写的话,会报: Server 'server1' is not configured for RPC. 错误。
执行过程:select * from openquery(别名,'exec aaaa')函数:select * from openquery(别名,'select * from aa(123)')
那是因为,没有设置link服务器的选项。sp_serveroption 'Your server name','rpc',true --从给定的服务器启用 RPC gosp_serveroption 'Your server name','rpc out',true --对给定的服务器启用 RPC。 go
带返回参数和输入参数的如何写呀?? select * from openquery(别名,'exec aaaa') 这个没带参数呀。还有这里的别名指啥?? 数据库的连接别名??也就是 server1 ???
From OpenQuery(server1,'Exec 库名..过程名 12345,123')
谢谢 enhydraboy(努力学习C#) 执行远程服务器的存储过程可以了。 下面这样写就可以了。CREATE PROCEDURE dbo.test AS declare @connstrto21 varchar(200) declare @str nvarchar(200) select @connstrto21 = dbo.getconnstr() if not exists(select 1 from master.dbo.sysservers where srvname = 'server1') EXEC sp_addlinkedserver 'server1','','MSDASQL',NULL,NULL,@connstrto21exec sp_serveroption 'server1','rpc out',true exec server1.database1.dbo.procedure1 参数1,参数2 outputexec sp_droplinkedsrvlogin 'server1','sa' exec sp_dropserver 'server1' go
那就没有并发性了,你干脆把 if not exists(select 1 from master.dbo.sysservers where srvname = 'server1') EXEC sp_addlinkedserver 'server1','','MSDASQL',NULL,NULL,@connstrto21 独立出来! 企业管理器-->右键你的实例(就是那个有绿色图标的)-->属性-->连接-->改最大并发连接数为0(无限制)
..................exec sp_droplinkedsrvlogin 'server1','sa'
exec sp_dropserver 'server1'上面那样做不妥,理由如下:
能实现数据缓存池的方法那当然是最好的,但是找不到实现的方法呀。to : tenflee(阿牛哥)
做触发器呀,SQL有是否链接的线程系统参数,直接使用就行了,触发器发现在还有其它线程链接的话,就不关掉数据,否则就关掉。
我只看到有表的触发器,其他的触发器,也就是针对这个存储过程的触发器如何写呀??
最好给出范列。谢谢。或者是你做个指针,用new 的方法另开一条线程,那么你另一条线程就管不着它了
这个更晕了,sql中如何用指针呀,没听说过。
sp_addlinkedserver
sp_droplinkedsrvlogin
sp_dropserver
也需要花费时间
但是不要用sa,加个其他用户,保护一下密码
to 蝈蝈俊
联结服务器最好不要动态建立效率不好,且也没有必要,你的服务器又不是手提要不你可以做成界面,连远程服务名、用户名、密码由界面输入如果你坚持你可以建立##全局临时表如:
每次调用的时候看看它是否存在:if not exists(select 1 from master.dbo.sysservers where srvname = 'server1')
begin
EXEC sp_addlinkedserver 'server1','','MSDASQL',NULL,NULL,@connstrto21
create table ##全局临时表(flag int identity(1,1)) --如果不在就建立临时表
end
insert ##全局临时表 default values --插入一条......你的复杂运算 delete ##全局临时表 where id=(select min(id) from ##全局临时表)if (select count(*) from ##全局临时表)=0
begin
exec sp_droplinkedsrvlogin 'server1','sa'
exec sp_dropserver 'server1'
drop table ##全局临时表
end
if not exists(select 1 from master.dbo.sysservers where srvname = 'server1')
begin
EXEC sp_addlinkedserver 'server1','','MSDASQL',NULL,NULL,@connstrto21
end
同时我不释放,是不是就会只有一个连接???其他请求的时候,也是用的这个连接???
至于每次访问的连接,是怎么释放,没有研究过,不过我想,既然是通过OLE DB 连接的,会自动释放的
执行远程服务器的数据库的存储过程(或者函数)如何写??CREATE PROCEDURE dbo.test AS
declare @connstrto21 varchar(200)
declare @str nvarchar(200)
select @connstrto21 = dbo.getconnstr()
if not exists(select 1 from master.dbo.sysservers where srvname = 'server1')
EXEC sp_addlinkedserver 'server1','','MSDASQL',NULL,NULL,@connstrto21这里如何写???
exec server1.database1.dbo.procedure1 参数1,参数2 output
这样写不行呀。exec sp_droplinkedsrvlogin 'server1','sa'
exec sp_dropserver 'server1'
go
exec server1.database1.dbo.procedure1 参数1,参数2 output方式来写的话,会报:
Server 'server1' is not configured for RPC.
错误。
gosp_serveroption 'Your server name','rpc out',true --对给定的服务器启用 RPC。
go
select * from openquery(别名,'exec aaaa')
这个没带参数呀。还有这里的别名指啥?? 数据库的连接别名??也就是 server1 ???
执行远程服务器的存储过程可以了。
下面这样写就可以了。CREATE PROCEDURE dbo.test AS
declare @connstrto21 varchar(200)
declare @str nvarchar(200)
select @connstrto21 = dbo.getconnstr()
if not exists(select 1 from master.dbo.sysservers where srvname = 'server1')
EXEC sp_addlinkedserver 'server1','','MSDASQL',NULL,NULL,@connstrto21exec sp_serveroption 'server1','rpc out',true
exec server1.database1.dbo.procedure1 参数1,参数2 outputexec sp_droplinkedsrvlogin 'server1','sa'
exec sp_dropserver 'server1'
go
这样的写法仍然没法获得返回参数。
比如:
declare @a varchar(50),@b varchar(50)
exec server1.database1.dbo.procedure1 'ghj1976',@a output,@b output
我想把返回参数读取到@a @b 如何写呀。
EXEC sp_addlinkedserver 'server1',N'SQL Server'
EXEC sp_addlinkedsrvlogin 'server1', 'false', NULL, 'SA', 'Password'
...
exec server1.database1.dbo.procedure1 参数1,参数2 output
有个问题:
EXEC sp_addlinkedserver 'server1',N'SQL Server'
EXEC sp_addlinkedsrvlogin 'server1', 'false', NULL, 'SA', 'Password'这里的server1 是远程服务器的别名,但是远程服务器的名字(或者地址比如192.168.1.1)写到哪里呀???
也就是下面的方式:
CREATE PROCEDURE dbo.test AS
declare @connstrto21 varchar(200)
declare @str nvarchar(200)
select @connstrto21 = dbo.getconnstr()
if not exists(select 1 from master.dbo.sysservers where srvname = 'server1')
EXEC sp_addlinkedserver 'server1','','MSDASQL',NULL,NULL,@connstrto21
select @str = N'select top 1 * from server1.database1.dbo.table1'
exec sp_executesql @str
go在并发处理方面,谁还有更好的方案。????thanks
EXEC sp_addlinkedsrvlogin 'server1', 'false', NULL, 'SA', 'Password'
EXEC sp_addlinkedsrvlogin 'server1', 'false', NULL, 'SA', 'Password'
if not exists(select 1 from master.dbo.sysservers where srvname = 'server1')
EXEC sp_addlinkedserver 'server1','','MSDASQL',NULL,NULL,@connstrto21
独立出来!
企业管理器-->右键你的实例(就是那个有绿色图标的)-->属性-->连接-->改最大并发连接数为0(无限制)
EXEC sp_addlinkedserver
'Test1', --名称
'',
'MSDASQL',
NULL,
NULL,
'DRIVER={SQL Server};SERVER=192.168.0.1;UID=user;PWD=password;'
连接服务器速度是够慢的,模拟过几个用户连接查询,速度不敢恭维