Sal*_*eem 6 sql linked-server sql-server-2008
我需要测试一个表是否存在于链接服务器中,其中链接服务器是一个参数(必须是),这就是我使用exec方法的原因.我尝试了很多方法,但没有成功.
Declare @LinkedServerName varchar(50)
Declare @DS varchar(50)
Declare @username varchar(50)
Declare @pswd varchar(12)
Declare @TableExists int
Set @DS = 'test\TestDB'
Set @LinkedServerName = 'LinkedServerAutoAddDrop'
Set @username = 'ua'
Set @pswd = 'pass'
Set @TableExists = 0
if not exists(select * from sys.servers where name = @LinkedServerName)
BEGIN
EXEC sp_addlinkedserver
@server=@LinkedServerName,
@srvproduct='',
@provider='SQLNCLI',
@datasrc=@DS
EXEC sp_addlinkedsrvlogin @LinkedServerName, N'false', NULL, @username, @pswd
exec sp_serveroption @server=@LinkedServerName, @optname='rpc', @optvalue='TRUE'
exec sp_serveroption @server=@LinkedServerName, @optname='rpc out', @optvalue='TRUE'
END
exec('IF (EXISTS (SELECT * FROM OPENQUERY([' + @LinkedServerName + '], ''select * from LinkedDB.INFORMATION_SCHEMA.TABLES Where TABLE_NAME = ''''TableName'''''')))
BEGIN
exec (''Set ' + @TableExists + ' = 1'')
END')
IF (@TableExists = 1)
BEGIN
exec('Insert Into ...')
END
Run Code Online (Sandbox Code Playgroud)
我个人会使用sp_executesql输出参数:
DECLARE @SQL NVARCHAR(MAX) = ''
DECLARE @TableExists BIT;
SET @SQL = 'SELECT @TableExists = CASE WHEN TableExists = 0 THEN 0 ELSE 1 END
FROM OPENQUERY(' + QUOTENAME(@LinkedServerName)
+ ', ''SELECT TableExists = COUNT(*)
FROM LinkedDB.INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = ''''TableName'''''');';
EXECUTE sp_executesql @SQL, N'@TableExists BIT OUTPUT', @TableExists OUT;
IF (@TableExists = 1)
BEGIN
-- DO SOMETHING
END;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5687 次 |
| 最近记录: |