I am writing a dynamic SQL statement to create view on a remote server in a specific database. The SQL statement I generate gets executed on the master database. If I use use the 3 part naming convention in the CREATE VIEW
statement does not help.
--QUERY
SELECT
'IF OBJECT_ID(N'''+ ss.name +'.view_' + so.name + ''') IS NULL
EXECUTE (''CREATE VIEW ' + ss.name + '.view_' + so.name + ' AS SELECT * FROM REMOTEDATABASE.' + ss.name + '.' + so.name + ''') AT [REMOTESERVER]'
FROM sys.objects so
JOIN sys.schemas ss
ON so.[schema_id] = ss.[schema_id]
WHERE so.[type] = 'U';
--Query Result
IF OBJECT_ID(N'dbo.view_Test') IS NULL
EXECUTE ('CREATE VIEW dbo.view_Test AS SELECT * FROM REMOTEDATABASE.dbo.Test') AT [REMOTESERVER]