Skip to content

Fake synonyms #73

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 33 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 29 commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
486d190
Add remote FakeTable for remote synonyms functionality
dkultasev Oct 4, 2019
7001123
Add creation of tSQLt_RemoteSynonymsTestDatabase database and needed …
dkultasev Oct 22, 2019
8bcb40e
Add bunch of remote FakeTable tests
dkultasev Oct 22, 2019
7c4b997
Add UDDT support + finish all FakeTable tests for Remote synonyms
dkultasev Oct 25, 2019
6b32fda
Add possibility to fake function with temp or derived tables
dkultasev Dec 6, 2019
bc92081
Add new files to the SSMS project
dkultasev Dec 8, 2019
7c2f65f
Re-factor FakeTable SP
Dec 9, 2019
554a7d5
Addmissing configuration for remote database setup
Dec 12, 2019
48fc0b3
Merge remote-tracking branch 'upstream/master'
dkultasev Oct 20, 2020
612eee4
Merge remote-tracking branch 'upstream/master' into extend_fakefuncti…
dkultasev Oct 20, 2020
36d60a7
Remove wrongly removed new lines
dkultasev Oct 20, 2020
78650b0
PR#53 Add new lines at the end of the files
dkultasev Oct 22, 2020
b2af972
PR#53 Add missing schema for the table
dkultasev Oct 22, 2020
3c6628d
Remove test
dkultasev Oct 22, 2020
83bb699
PR#53 Fix tests
dkultasev Oct 22, 2020
d0ebdd3
Change naming convention for the FakeFunction data output table name
dkultasev Oct 23, 2020
03e79a1
Fix issue with the long function names
dkultasev Oct 23, 2020
6d70b47
Add FakeFunction test for long name and output table schema
dkultasev Oct 23, 2020
0f23275
Add test for data source table starting with SELECT
dkultasev Oct 23, 2020
b402d20
Using tSQLt.Private::CreateUniqueObjectName() to generate random obje…
dkultasev Oct 25, 2020
1da509e
Remove `FunctionName` parameter
dkultasev Oct 25, 2020
12ab3e7
Change build order as CLR is used
dkultasev Nov 7, 2020
182126d
Fix fake functions test
dkultasev Nov 7, 2020
cbc4d7e
Add CLR function exception message test
dkultasev Nov 7, 2020
2f2876b
Merge branch 'master' into fake_synonyms
dkultasev Nov 13, 2020
815a42f
Merge remote-tracking branch 'upstream/master' into fake_synonyms
dkultasev Nov 23, 2020
32be461
Merge branch 'master' into fake_synonyms
dkultasev Nov 23, 2020
0a64130
Remove incorrectly added test
dkultasev Nov 23, 2020
ada3745
Add new lines at the end of the files
dkultasev Nov 23, 2020
002548a
Merge remote-tracking branch 'origin/master' into fake_synonyms
dkultasev Oct 3, 2021
9c2494c
Post merge fixes
dkultasev Oct 3, 2021
000a3e4
Using common approach to create "remote" database with `temp_prepare_…
dkultasev Oct 10, 2021
b26c871
Revert incorrectly modified file
dkultasev Oct 10, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions Build/Build.ssmssqlproj
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,12 @@
<AssociatedConnUserName />
<FullPath>GrantBuildPermissions.sql</FullPath>
</FileNode>
<FileNode Name="GrantUserAccessToRemoteDatabase.sql">
<AssociatedConnectionMoniker>8c91a03d-f9b4-46c0-a305-b5dcc79ff907:Dev_tSQLt:True</AssociatedConnectionMoniker>
<AssociatedConnSrvName>Dev_tSQLt</AssociatedConnSrvName>
<AssociatedConnUserName />
<FullPath>GrantUserAccessToRemoteDatabase.sql</FullPath>
</FileNode>
<FileNode Name="Install(master.tSQLt_testutil).sql">
<AssociatedConnectionMoniker>8c91a03d-f9b4-46c0-a305-b5dcc79ff907:Dev_tSQLt:True</AssociatedConnectionMoniker>
<AssociatedConnSrvName>Dev_tSQLt</AssociatedConnSrvName>
Expand Down
7 changes: 7 additions & 0 deletions Build/GrantUserAccessToRemoteDatabase.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
IF EXISTS ( SELECT 1
FROM sys.databases
WHERE name = 'tSQLt_RemoteSynonymsTestDatabase' )
BEGIN

EXEC dbo.sp_changedbowner @loginame = N'tSQLt.Build';
END;
2 changes: 2 additions & 0 deletions Build/tSQLt.build.xml
Original file line number Diff line number Diff line change
Expand Up @@ -361,6 +361,7 @@
<copy file="CreateBuildDb.sql" todir="temp"/>
<copy file="Drop(master.tSQLt_testutil).sql" todir="temp"/>
<copy file="Install(master.tSQLt_testutil).sql" todir="temp"/>
<copy file="GrantUserAccessToRemoteDatabase.sql" todir="temp"/>
<copy file="GetTestResults.sql" todir="temp"/>
<copy file="GetFailedTestCount.sql" todir="temp"/>
<copy file="../Examples/TestThatExamplesAreDeployed.sql" todir="temp"/>
Expand All @@ -384,6 +385,7 @@
<include name="EnableExternalAccess.sql"/>
<include name="Drop(master.tSQLt_testutil).sql"/>
<include name="Install(master.tSQLt_testutil).sql"/>
<include name="GrantUserAccessToRemoteDatabase.sql"/>
<include name="ChangeDbAndExecuteStatement(tSQLt.Build).sql"/>
<include name="CreateBuildDb.sql"/>
<include name="GetTestResults.sql"/>
Expand Down
6 changes: 6 additions & 0 deletions Build/tSQLt.validatebuild.xml
Original file line number Diff line number Diff line change
Expand Up @@ -374,6 +374,12 @@
<param name="execute.sql.filename" value="temp/Install(master.tSQLt_testutil).sql" />
</antcall>

<antcall target="execute.sql.file">
<param name="execute.sql.database" value="${db.name}" />
<param name="execute.sql.elevated" value="true" />
<param name="execute.sql.filename" value="temp/GrantUserAccessToRemoteDatabase.sql" />
</antcall>

<antcall target="execute.sql.file">
<param name="execute.sql.database" value="${db.name}" />
<param name="execute.sql.elevated" value="true" />
Expand Down
11 changes: 11 additions & 0 deletions Source/BuildOrder.txt
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,20 @@ tSQLt.PrepareServer.ssp.sql
tSQLt.Private_NewTestClassList.tbl.sql
tSQLt.Private_ResetNewTestClassList.ssp.sql
tSQLt.Private_SysTypes.svw.sql
tSQLt.Private_SysColumns.svw.sql
tSQLt.Private_SysComputedColumns.svw.sql
tSQLt.Private_SysDefaultConstraints.svw.sql
tSQLt.Private_SysIdentityColumns.svw.sql
tSQLt.Private_SysObjects.svw.sql
tSQLt.Private_SysSchemas.svw.sql
tSQLt.Private_GetFullTypeName.sfn.sql
tSQLt.Private_DisallowOverwritingNonTestSchema.ssp.sql
tSQLt.Private_CreateRemoteSysObjects.ssp.sql
tSQLt.Private_GetRemoteObjectId.ssp.sql
tSQLt.Private_AlterSysObjectForRemote.ssp.sql
tSQLt.Private_QuoteClassNameForNewTestClass.sfn.sql
tSQLt.Private_MarkSchemaAsTestClass.ssp.sql
tSQLt.Private_ValidateSynonymCompatibilityWithFakeTable.ssp.sql
tSQLt.NewTestClass.ssp.sql
tSQLt.Fail.ssp.sql
tSQLt.class.sql
Expand Down Expand Up @@ -54,6 +64,7 @@ tSQLt.Private_GetDataTypeOrComputedColumnDefinition.sfn.sql
tSQLt.Private_GetIdentityDefinition.sfn.sql
tSQLt.Private_GetDefaultConstraintDefinition.sfn.sql
tSQLt.Private_GetUniqueConstraintDefinition.sfn.sql
tSQLt.Private_CreateRemoteUserDefinedDataTypes.ssp.sql
tSQLt.Private_CreateFakeOfTable.ssp.sql
tSQLt.Private_MarkFakeTable.ssp.sql
tSQLt.FakeTable.ssp.sql
Expand Down
62 changes: 61 additions & 1 deletion Source/Source.ssmssqlproj
Original file line number Diff line number Diff line change
Expand Up @@ -211,6 +211,12 @@
<AssociatedConnUserName />
<FullPath>tSQLt.NewTestClass.ssp.sql</FullPath>
</FileNode>
<FileNode Name="tSQLt.Private_AlterSysObjectForRemote.ssp.sql">
<AssociatedConnectionMoniker>8c91a03d-f9b4-46c0-a305-b5dcc79ff907:Dev_tSQLt:True</AssociatedConnectionMoniker>
<AssociatedConnSrvName>Dev_tSQLt</AssociatedConnSrvName>
<AssociatedConnUserName />
<FullPath>tSQLt.Private_AlterSysObjectForRemote.ssp.sql</FullPath>
</FileNode>
<FileNode Name="tSQLt.PrepareServer.ssp.sql">
<AssociatedConnectionMoniker>8c91a03d-f9b4-46c0-a305-b5dcc79ff907:Dev_tSQLt:True</AssociatedConnectionMoniker>
<AssociatedConnSrvName>Dev_tSQLt</AssociatedConnSrvName>
Expand Down Expand Up @@ -247,6 +253,18 @@
<AssociatedConnUserName />
<FullPath>tSQLt.Private_CreateFakeFunction.ssp.sql</FullPath>
</FileNode>
<FileNode Name="tSQLt.Private_CreateRemoteSysObjects.ssp.sql">
<AssociatedConnectionMoniker>8c91a03d-f9b4-46c0-a305-b5dcc79ff907:Dev_tSQLt:True</AssociatedConnectionMoniker>
<AssociatedConnSrvName>Dev_tSQLt</AssociatedConnSrvName>
<AssociatedConnUserName />
<FullPath>tSQLt.Private_CreateRemoteSysObjects.ssp.sql</FullPath>
</FileNode>
<FileNode Name="tSQLt.Private_CreateRemoteUserDefinedDataTypes.ssp.sql">
<AssociatedConnectionMoniker>8c91a03d-f9b4-46c0-a305-b5dcc79ff907:Dev_tSQLt:True</AssociatedConnectionMoniker>
<AssociatedConnSrvName>Dev_tSQLt</AssociatedConnSrvName>
<AssociatedConnUserName />
<FullPath>tSQLt.Private_CreateRemoteUserDefinedDataTypes.ssp.sql</FullPath>
</FileNode>
<FileNode Name="tSQLt.Private_CreateFakeOfTable.ssp.sql">
<AssociatedConnectionMoniker>8c91a03d-f9b4-46c0-a305-b5dcc79ff907:Dev_tSQLt:True</AssociatedConnectionMoniker>
<AssociatedConnSrvName>Dev_tSQLt</AssociatedConnSrvName>
Expand Down Expand Up @@ -319,6 +337,12 @@
<AssociatedConnUserName />
<FullPath>tSQLt.Private_GetFullTypeName.sfn.sql</FullPath>
</FileNode>
<FileNode Name="tSQLt.Private_GetRemoteObjectId.ssp.sql">
<AssociatedConnectionMoniker>8c91a03d-f9b4-46c0-a305-b5dcc79ff907:Dev_tSQLt:True</AssociatedConnectionMoniker>
<AssociatedConnSrvName>Dev_tSQLt</AssociatedConnSrvName>
<AssociatedConnUserName />
<FullPath>tSQLt.Private_GetRemoteObjectId.ssp.sql</FullPath>
</FileNode>
<FileNode Name="tSQLt.Private_GetIdentityDefinition.sfn.sql">
<AssociatedConnectionMoniker>8c91a03d-f9b4-46c0-a305-b5dcc79ff907:Dev_tSQLt:True</AssociatedConnectionMoniker>
<AssociatedConnSrvName>Dev_tSQLt</AssociatedConnSrvName>
Expand Down Expand Up @@ -463,12 +487,48 @@
<AssociatedConnUserName />
<FullPath>tSQLt.Private_SqlVersion.sfn.sql</FullPath>
</FileNode>
<FileNode Name="tSQLt.Private_SysColumns.svw.sql">
<AssociatedConnectionMoniker>8c91a03d-f9b4-46c0-a305-b5dcc79ff907:Dev_tSQLt:True</AssociatedConnectionMoniker>
<AssociatedConnSrvName>Dev_tSQLt</AssociatedConnSrvName>
<AssociatedConnUserName />
<FullPath>tSQLt.Private_SysColumns.svw.sql</FullPath>
</FileNode>
<FileNode Name="tSQLt.Private_SysComputedColumns.svw.sql">
<AssociatedConnectionMoniker>8c91a03d-f9b4-46c0-a305-b5dcc79ff907:Dev_tSQLt:True</AssociatedConnectionMoniker>
<AssociatedConnSrvName>Dev_tSQLt</AssociatedConnSrvName>
<AssociatedConnUserName />
<FullPath>tSQLt.Private_SysComputedColumns.svw.sql</FullPath>
</FileNode>
<FileNode Name="tSQLt.Private_SysDefaultConstraints.svw.sql">
<AssociatedConnectionMoniker>8c91a03d-f9b4-46c0-a305-b5dcc79ff907:Dev_tSQLt:True</AssociatedConnectionMoniker>
<AssociatedConnSrvName>Dev_tSQLt</AssociatedConnSrvName>
<AssociatedConnUserName />
<FullPath>tSQLt.Private_SysDefaultConstraints.svw.sql</FullPath>
</FileNode>
<FileNode Name="tSQLt.Private_SysIdentityColumns.svw.sql">
<AssociatedConnectionMoniker>8c91a03d-f9b4-46c0-a305-b5dcc79ff907:Dev_tSQLt:True</AssociatedConnectionMoniker>
<AssociatedConnSrvName>Dev_tSQLt</AssociatedConnSrvName>
<AssociatedConnUserName />
<FullPath>tSQLt.Private_SysIdentityColumns.svw.sql</FullPath>
</FileNode>
<FileNode Name="tSQLt.Private_SysIndexes.svw.sql">
<AssociatedConnectionMoniker>8c91a03d-f9b4-46c0-a305-b5dcc79ff907:Dev_tSQLt:True</AssociatedConnectionMoniker>
<AssociatedConnSrvName>Dev_tSQLt</AssociatedConnSrvName>
<AssociatedConnUserName />
<FullPath>tSQLt.Private_SysIndexes.svw.sql</FullPath>
</FileNode>
<FileNode Name="tSQLt.Private_SysObjects.svw.sql">
<AssociatedConnectionMoniker>8c91a03d-f9b4-46c0-a305-b5dcc79ff907:Dev_tSQLt:True</AssociatedConnectionMoniker>
<AssociatedConnSrvName>Dev_tSQLt</AssociatedConnSrvName>
<AssociatedConnUserName />
<FullPath>tSQLt.Private_SysObjects.svw.sql</FullPath>
</FileNode>
<FileNode Name="tSQLt.Private_SysSchemas.svw.sql">
<AssociatedConnectionMoniker>8c91a03d-f9b4-46c0-a305-b5dcc79ff907:Dev_tSQLt:True</AssociatedConnectionMoniker>
<AssociatedConnSrvName>Dev_tSQLt</AssociatedConnSrvName>
<AssociatedConnUserName />
<FullPath>tSQLt.Private_SysSchemas.svw.sql</FullPath>
</FileNode>
<FileNode Name="tSQLt.Private_SysTypes.svw.sql">
<AssociatedConnectionMoniker>8c91a03d-f9b4-46c0-a305-b5dcc79ff907:Dev_tSQLt:True</AssociatedConnectionMoniker>
<AssociatedConnSrvName>Dev_tSQLt</AssociatedConnSrvName>
Expand Down Expand Up @@ -588,7 +648,7 @@
<AssociatedConnSrvName>Dev_tSQLt</AssociatedConnSrvName>
<AssociatedConnUserName />
<FullPath>tSQLtCLR_CreateProcs.sql</FullPath>
</FileNode>
</FileNode>
</Items>
</LogicalFolder>
<LogicalFolder Name="Miscellaneous" Type="3" Sorted="true">
Expand Down
42 changes: 23 additions & 19 deletions Source/tSQLt.FakeTable.ssp.sql
Original file line number Diff line number Diff line change
Expand Up @@ -13,15 +13,17 @@ BEGIN
DECLARE @OrigTableName NVARCHAR(MAX);
DECLARE @NewNameOfOriginalTable NVARCHAR(4000);
DECLARE @OrigTableFullName NVARCHAR(MAX); SET @OrigTableFullName = NULL;

DECLARE @RemoteObjectID INT;
DECLARE @SynonymObjectId INT;

SELECT @OrigSchemaName = @SchemaName,
@OrigTableName = @TableName

IF(@OrigTableName NOT IN (PARSENAME(@OrigTableName,1),QUOTENAME(PARSENAME(@OrigTableName,1)))
AND @OrigSchemaName IS NOT NULL)
BEGIN
RAISERROR('When @TableName is a multi-part identifier, @SchemaName must be NULL!',16,10);
END
BEGIN
RAISERROR('When @TableName is a multi-part identifier, @SchemaName must be NULL!',16,10);
END

SELECT @SchemaName = CleanSchemaName,
@TableName = CleanTableName
Expand All @@ -31,25 +33,27 @@ BEGIN

EXEC tSQLt.Private_RenameObjectToUniqueName @SchemaName, @TableName, @NewNameOfOriginalTable OUTPUT;

SELECT @OrigTableFullName = S.base_object_name
FROM sys.synonyms AS S
WHERE S.object_id = OBJECT_ID(@SchemaName + '.' + @NewNameOfOriginalTable);

IF(@OrigTableFullName IS NOT NULL)
BEGIN
IF(COALESCE(OBJECT_ID(@OrigTableFullName,'U'),OBJECT_ID(@OrigTableFullName,'V')) IS NULL)
BEGIN
RAISERROR('Cannot fake synonym %s.%s as it is pointing to %s, which is not a table or view!',16,10,@SchemaName,@TableName,@OrigTableFullName);
END;
END;
ELSE
BEGIN
SET @OrigTableFullName = @SchemaName + '.' + @NewNameOfOriginalTable;
END;
SET @OrigTableFullName = @SchemaName + '.' + @NewNameOfOriginalTable;
SET @SynonymObjectId = OBJECT_ID(@OrigTableFullName, 'SN');
IF ( @SynonymObjectId > 0)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should this be NOT NULL?

BEGIN
EXEC tSQLt.Private_GetRemoteObjectId @SynonymObjectId = @SynonymObjectId ,
@RemoteObjectId = @RemoteObjectID OUTPUT,
@OrigTableFullName = @OrigTableFullName OUTPUT

EXEC tSQLt.Private_CreateFakeOfTable @SchemaName, @TableName, @OrigTableFullName, @Identity, @ComputedColumns, @Defaults;
EXEC tSQLt.Private_ValidateSynonymCompatibilityWithFakeTable @TableName, @SchemaName, @OrigTableFullName;
END;

EXEC tSQLt.Private_CreateFakeOfTable @SchemaName, @TableName, @OrigTableFullName, @Identity, @ComputedColumns, @Defaults, @RemoteObjectID;

EXEC tSQLt.Private_MarkFakeTable @SchemaName, @TableName, @NewNameOfOriginalTable;

IF (@RemoteObjectID IS NOT NULL)
BEGIN
EXEC tSQLt.Private_CreateRemoteSysObjects @Instance = NULL, @Database = NULL;
END

END
---Build-
GO
49 changes: 49 additions & 0 deletions Source/tSQLt.Private_AlterSysObjectForRemote.ssp.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
IF OBJECT_ID('tSQLt.Private_AlterSysObjectForRemote') IS NOT NULL
DROP PROCEDURE tSQLt.Private_AlterSysObjectForRemote;
GO
---Build+
CREATE PROCEDURE tSQLt.Private_AlterSysObjectForRemote
@Instance NVARCHAR(MAX) ,
@Database NVARCHAR(MAX) ,
@SysObject NVARCHAR(MAX) ,
@PrivateViewName NVARCHAR(MAX)
AS
BEGIN
DECLARE @sql NVARCHAR(MAX);
SET @sql = 'ALTER VIEW tSQLt.' + @PrivateViewName + ' AS
SELECT ' +
CASE WHEN @SysObject = 'types' THEN '
name ,
system_type_id ,
user_type_id ,
CASE WHEN is_user_defined = 1 THEN 1
ELSE schema_id
END AS schema_id ,
principal_id ,
max_length ,
precision ,
scale ,
collation_name ,
is_nullable ,
is_user_defined ,
is_assembly_type ,
default_object_id ,
rule_object_id ,
is_table_type
' ELSE '* ' END
+ CASE WHEN CAST(SERVERPROPERTY('ProductVersion') AS VARCHAR(MAX)) LIKE '9.%'
AND @SysObject = 'types' THEN ',0 is_table_type'
ELSE ''
END + ' FROM ' + COALESCE(QUOTENAME(@Instance) + '.', '')
+ COALESCE(QUOTENAME(@Database) + '.', '') + 'sys.' + @SysObject
+ ';';




EXEC (@sql);

RETURN 0;
END;
---Build-
GO
12 changes: 9 additions & 3 deletions Source/tSQLt.Private_CreateFakeOfTable.ssp.sql
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,17 @@ CREATE PROCEDURE tSQLt.Private_CreateFakeOfTable
@OrigTableFullName NVARCHAR(MAX),
@Identity BIT,
@ComputedColumns BIT,
@Defaults BIT
@Defaults BIT,
@RemoteObjectID INT
AS
BEGIN
DECLARE @Cmd NVARCHAR(MAX);
DECLARE @Cols NVARCHAR(MAX);

IF (@RemoteObjectID IS NOT NULL)
BEGIN
EXEC tSQLt.Private_CreateRemoteUserDefinedDataTypes @RemoteObjectID = @RemoteObjectID
END

SELECT @Cols =
(
Expand All @@ -25,11 +31,11 @@ BEGIN
THEN ''
ELSE ' NULL'
END
FROM sys.columns c
FROM tSQLt.Private_SysColumns c
CROSS APPLY tSQLt.Private_GetDataTypeOrComputedColumnDefinition(c.user_type_id, c.max_length, c.precision, c.scale, c.collation_name, c.object_id, c.column_id, @ComputedColumns) cc
CROSS APPLY tSQLt.Private_GetDefaultConstraintDefinition(c.object_id, c.column_id, @Defaults) AS dc
CROSS APPLY tSQLt.Private_GetIdentityDefinition(c.object_id, c.column_id, @Identity) AS id
WHERE object_id = OBJECT_ID(@OrigTableFullName)
WHERE object_id = COALESCE(@RemoteObjectID, OBJECT_ID(@OrigTableFullName))
ORDER BY column_id
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)');
Expand Down
52 changes: 52 additions & 0 deletions Source/tSQLt.Private_CreateRemoteSysObjects.ssp.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
IF OBJECT_ID('tSQLt.Private_CreateRemoteSysObjects') IS NOT NULL
DROP PROCEDURE tSQLt.Private_CreateRemoteSysObjects;
GO
---Build+
CREATE PROCEDURE tSQLt.Private_CreateRemoteSysObjects
@Instance NVARCHAR(MAX) ,
@Database NVARCHAR(MAX)
AS
BEGIN
DECLARE @SysObject NVARCHAR(MAX);
DECLARE @ViewName NVARCHAR(MAX);


DECLARE @SysObjects AS TABLE
(
SysObject NVARCHAR(MAX) ,
ViewName NVARCHAR(MAX)
);
INSERT INTO @SysObjects
VALUES ( 'types', 'Private_SysTypes' ),
( 'computed_columns', 'Private_SysComputedColumns' ),
( 'default_constraints', 'Private_SysDefaultConstraints' ),
( 'identity_columns', 'Private_SysIdentityColumns' ),
( 'columns', 'Private_SysColumns' ),
( 'objects', 'Private_SysObjects' ),
( 'schemas', 'Private_SysSchemas' );

DECLARE @cursor AS CURSOR;

SET @cursor = CURSOR FOR
SELECT SysObject, ViewName
FROM @SysObjects;

OPEN @cursor;
FETCH NEXT FROM @cursor INTO @SysObject, @ViewName;

WHILE @@FETCH_STATUS = 0
BEGIN
EXEC tSQLt.Private_AlterSysObjectForRemote @Instance = @Instance,
@Database = @Database, @SysObject = @SysObject,
@PrivateViewName = @ViewName;

FETCH NEXT FROM @cursor INTO @SysObject, @ViewName;
END;

CLOSE @cursor;
DEALLOCATE @cursor;

RETURN 0;
END;
---Build-
GO
Loading