Есть 2 базы данных: MAIN и IP2LocationSQL Server хранится проверка процедура, если существует таблица в другой базе данных и переименовать его
в 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 не существует, то он (правильно) создает его, но если он существует .. Я получаю
There is already an object named 'db11_new' in the database.
поэтому кажется, что есть что-то неправильное в
IF NOT EXISTS (SELECT * FROM sys.objects
WHERE object_id = OBJECT_ID(N'[ip2location].[dbo].[db11_new]') AND type in (N'U'))
, а также в конце процедуры с 2 Rename я (всегда) следующий ответ
Msg 15248, Level 11, State 1, Procedure sp_rename, Line 359 Either the parameter @objname is ambiguous or the claimed @objtype (OBJECT) is wrong.
кажется проблемой является потому, что sproc не хранится в базе данных ip2location DB, а в другой базе данных.
может предложить решение, учитывая, что я предпочел бы сохранить все sprocs в MAIN DB, так как есть ли там все остальные?
Благодаря
И что случилось с 'db11_old'? После первого запуска этой процедуры он создает таблицу 'db11_old' при попытке запустить этот SP второй раз, когда он падает с ошибкой, которую представляет' sb11_old' уже. – gofr1