我想用一個子句執行以下陳述句以防止跨服務器連接:
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?
uj5u.com熱心網友回復:
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;
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/425374.html
