Я видел несколько решений о том, как создавать таблицы на связанных серверах с помощью EXEC('some sql') AT [LINKED_SERVER_NAME]
, и они работают вручную.
Я могу использовать запросы DML, такие как
EXEC ( 'select * from [' + @DbServerName + '].[' + @DbName + '].dbo.someTable' )
как я могу сделать что-то подобное для запросов DDL, например
EXEC ( 'CREATE TABLE [' + @DbServerName + '].[' + @DbName + '].dbo.someTable ( id int null) ' )
Я поэкспериментировал с select * from openquery(linkedservername, query) и exec(sql) AT [linkedservername] strong>, но каждый раз, когда я пытаюсь сделать имя сервера переменной, мне это не удается.
Я могу запускать все эти команды вручную в Query Analyzer, но всякий раз, когда я пытаюсь сделать имя связанного сервера переменной, они терпят неудачу для меня. То, что я пытаюсь сделать, это что-то вроде этого...
DECLARE @LinkedServerName nvarchar(100)
DECLARE @LinkedDbName nvarchar(100)
SET @LinkedServerName = 'SVR2'
SET @LinkedDbName = 'DB2'
DECLARE @DDL_QUERY nvarchar(1000)
SET @DDL_QUERY = 'CREATE TABLE [' + @LinkedDbName + '].dbo.T1 ( id int null )'
-- Current failed ideas
EXEC( @DDL_QUERY ) AT @LinkedServerName
SELECT * FROM OPENQUERY(@LinkedServerName, @DDL_QUERY)
EXEC( 'CREATE TABLE [' + @LinkedServerName + '].[' + @LinkedDbName + '].dbo.T1( id int null )'
Можно ли динамически создать таблицу, когда имя связанного сервера и имя базы данных на этом связанном сервере являются объявленными переменными?