Как мне создать хранимую процедуру, которая существует в одной базе данных, но запускает приведенный ниже код для другой (любой) базы данных?
SET @sql1 = N'INSERT INTO #Tables SELECT'
+ N' t.TABLE_NAME as TableName'
+ N',t.TABLE_SCHEMA as SchemaName'
+ N',(SELECT OBJECTPROPERTY(OBJECT_ID(t.TABLE_SCHEMA + ''.'' + t.TABLE_NAME),''TableHasIdentity'')) '
+ N'FROM ' + QUOTENAME(@TargetDBName)
+ N'.INFORMATION_SCHEMA.TABLES t'
IF @Verbose = 1
PRINT @sql1
EXEC(@sql1)
Я успешно получаю TABLE_NAME и SCHEMA_NAME, но основная проблема заключается в том, что OBJECTPROPERTY() выполняется в контексте базы данных хранимой процедуры, а не в контексте @TargetDBName.Итак, OBJECTPROPERTY () всегда будет возвращать ноль, если @TargetDBName не совпадает с базой данных, в которой находится sproc.
В настоящее время я использую SQL Server 2008.