2 つのデータベースがある: MAIN と IP2LOCATION
MAIN には、次のストアド プロシージャがあります。
CREATE PROCEDURE dbo.Update_IP2Location_DB11_from_CSV
AS
BEGIN
IF NOT EXISTS (SELECT * FROM sys.objects
WHERE object_id = OBJECT_ID(N'[ip2location].[dbo].[db11_new]') AND type in (N'U'))
BEGIN
CREATE TABLE [ip2location].[dbo].[db11_new]
(
[ip_from] bigint NOT NULL,
[ip_to] bigint NOT NULL,
[country_code] nvarchar(2) NOT NULL,
[country_name] nvarchar(64) NOT NULL,
[region_name] nvarchar(128) NOT NULL,
[city_name] nvarchar(128) NOT NULL,
[latitude] float NOT NULL,
[longitude] float NOT NULL,
[zip_code] nvarchar(30) NOT NULL,
[time_zone] nvarchar(8) NOT NULL,
) ON [PRIMARY]
CREATE INDEX [ip_from] ON [ip2location].[dbo].[db11_new]([ip_from])
END
ELSE
BEGIN
DELETE FROM [ip2location].[dbo].[db11_new]
END
BULK INSERT [ip2location].[dbo].[db11_new]
FROM 'D:\IP2LOCATION-LITE-DB11.CSV'
WITH
( FORMATFILE = 'C:\inetpub\wwwroot\ws\DB11_ip4.FMT')
EXEC sp_rename N'dbo.db11', N'db11_old', 'OBJECT'
EXEC sp_rename N'ip2location.dbo.db11_new', N'db11', 'OBJECT'
END
それは正しく動作しません:
db11_new が存在しない場合は (正しく) 作成されますが、存在する場合は..
データベースには「db11_new」という名前のオブジェクトがすでに存在します。
したがって、何か問題があるようです
IF NOT EXISTS (SELECT * FROM sys.objects
WHERE object_id = OBJECT_ID(N'[ip2location].[dbo].[db11_new]') AND type in (N'U'))
また、2 Renameの手順の最後に、(常に)次の回答が得られます
メッセージ 15248、レベル 11、状態 1、プロシージャ sp_rename、行 359 パラメータ @objname があいまいであるか、要求された @objtype (OBJECT) が間違っています。
問題は、sprocがip2location DBではなく別のデータベースに保存されているためです..
すべてのsprocをMAIN DBに保持したいので、解決策を提案できますか?
ありがとう