我正在尝试将数据库移植到RDS。由于限制,需要做一些更改。
是否可以检测当前数据库在RDS中的内部脚本(存储过程等)?
UPD。 我在我的函数中用这种方式进行测试:
if CHARINDEX(N'EC2AMAZ',(cast(serverproperty('ServerName') as nvarchar(256))))>0
return 1
else
return 0
答案 0 :(得分:2)
我喜欢@xiani的方法,并决定对其进行稍微增强(如果SQL Server的“正常”实例具有[rdsadmin]
数据库)。
DECLARE @IsAmazonRDS BIT = 0;
--1st test: does the [rdsadmin] database exist?
IF DB_ID('rdsadmin') IS NOT NULL
BEGIN
BEGIN TRY
--2nd test: If this is an Amazon RDS instance, we should not able to access the database "model" under the current security context.
DECLARE @FileCount INT;
SELECT @FileCount = COUNT(*) FROM model.sys.database_files;
END TRY
BEGIN CATCH
SET @IsAmazonRDS = 1;
--Comment/uncomment to verify the flag is set.
--SELECT 'Inside Catch';
END CATCH
END
可以根据您确定的任何标准对第3,第4等进行补充检查。自己决定要走多远。
答案 1 :(得分:1)
这不是万无一失的,取决于现有的 rdsadmin 数据库(AWS似乎总是创建),但我使用了这个:
SELECT CASE WHEN db_id('rdsadmin') IS NULL THEN 0 ELSE 1 END AS RDS_DATABASE;
答案 2 :(得分:1)
我在我的功能中使用这种方式:
if CHARINDEX(N'EC2AMAZ',(cast(serverproperty('ServerName') as nvarchar(256))))>0
return 1
else
return 0
现在可行。