EXEC sp_executesql: 没有跨服务器加入
EXEC sp_executesql: No cross server join
我想执行以下带有子句的语句以防止跨服务器连接:
SET @Sql = N'
SELECT TOP(1) @CodeID = CodeType
FROM ' + QUOTENAME(@Db) + '.bla.Field
WHERE Name = @SearchName'
EXEC sp_executesql @Sql,
N'@SearchName NVARCHAR(256), @CodeID NVARCHAR(256) OUTPUT',
@SearchName, @CodeID OUTPUT
对于 EXEC,我使用此语句:
SET @Sql = 'EXEC (''' + REPLACE(@Sql, '''', '''''') + ''')' + CASE WHEN @ServerName = @ThisServer THEN '' ELSE ' AT ' + @ServerName END
EXEC ( @Sql )
如何调整我的陈述以与 EXEC sp_executesql
一起工作?
您可以利用过程名称 EXEC
调用可以通过变量提供的事实。这样可以是:
DECLARE @exec nvarchar(1000) = N'sys.sp_executesql';
EXEC @exec N'SELECT 1';
-- 或
DECLARE @exec nvarchar(1000) = QUOTENAME(@db)
+ N'.sys.sp_executesql';
EXEC @exec N'SELECT 1';
-- 或
DECLARE @exec nvarchar(1000) = QUOTENAME(@server) + N'.'
+ QUOTENAME(@db)
+ N'.sys.sp_executesql';
EXEC @exec N'SELECT 1';
你的情况:
DECLARE @Sql nvarchar(max) = N'
SELECT TOP(1) @CodeID = CodeType
FROM bla.Field
WHERE Name = @SearchName;';
DECLARE @exec nvarchar(1000) = CASE
WHEN @ServerName = @ThisServer THEN N''
ELSE QUOTENAME(@ServerName) + N'.' END
+ QUOTENAME(@db) + N'.sys.sp_executesql';
EXEC @exec @Sql,
N'@SearchName NVARCHAR(256), @CodeID NVARCHAR(256) OUTPUT',
@SearchName, @CodeID OUTPUT;
我想执行以下带有子句的语句以防止跨服务器连接:
SET @Sql = N'
SELECT TOP(1) @CodeID = CodeType
FROM ' + QUOTENAME(@Db) + '.bla.Field
WHERE Name = @SearchName'
EXEC sp_executesql @Sql,
N'@SearchName NVARCHAR(256), @CodeID NVARCHAR(256) OUTPUT',
@SearchName, @CodeID OUTPUT
对于 EXEC,我使用此语句:
SET @Sql = 'EXEC (''' + REPLACE(@Sql, '''', '''''') + ''')' + CASE WHEN @ServerName = @ThisServer THEN '' ELSE ' AT ' + @ServerName END
EXEC ( @Sql )
如何调整我的陈述以与 EXEC sp_executesql
一起工作?
您可以利用过程名称 EXEC
调用可以通过变量提供的事实。这样可以是:
DECLARE @exec nvarchar(1000) = N'sys.sp_executesql';
EXEC @exec N'SELECT 1';
-- 或
DECLARE @exec nvarchar(1000) = QUOTENAME(@db)
+ N'.sys.sp_executesql';
EXEC @exec N'SELECT 1';
-- 或
DECLARE @exec nvarchar(1000) = QUOTENAME(@server) + N'.'
+ QUOTENAME(@db)
+ N'.sys.sp_executesql';
EXEC @exec N'SELECT 1';
你的情况:
DECLARE @Sql nvarchar(max) = N'
SELECT TOP(1) @CodeID = CodeType
FROM bla.Field
WHERE Name = @SearchName;';
DECLARE @exec nvarchar(1000) = CASE
WHEN @ServerName = @ThisServer THEN N''
ELSE QUOTENAME(@ServerName) + N'.' END
+ QUOTENAME(@db) + N'.sys.sp_executesql';
EXEC @exec @Sql,
N'@SearchName NVARCHAR(256), @CodeID NVARCHAR(256) OUTPUT',
@SearchName, @CodeID OUTPUT;