在同一台服务器上,我有大约 100 个具有相同架构的数据库,我想将相同的值插入到所有数据库中,并使用一个脚本向所有数据库添加新表和列。我不知道为什么,但是当我使用我的脚本时,它成功完成,但我的数据库中没有任何反应(我的值没有添加)。 你能告诉我哪里有错误并纠正我的脚本吗?
DECLARE @name nvarchar(max)
DECLARE cr_i CURSOR READ_ONY FORWARD_ONLY LOCAL STATIC FOR
SELECT
SUBSTRING(SUBSTRING([ICS], CHARINDEX('Initial Catalog=', [ICS]) + LEN('Initial Catalog='), 100), 0,
CHARINDEX(';', SUBSTRING([ICS], CHARINDEX('Initial Catalog=', [ICS]) + LEN('Initial Catalog='), 100)))
FROM [TCC].[dbo].T
WHERE ICS IS NOT NULL AND ICS <> ''
OPEN cr_i
WHILE 1 = 1
BEGIN
FETCH NEXT FROM cr_i INTO @name
IF @@fetch_status <> 0
BREAK
BEGIN TRANSACTION;
ALTER TABLE [dbo].[IMP_IPID]
ADD [FSKB] int NOT NULL DEFAULT 0;
INSERT INTO [__EFMH] ([MId], [PV])
VALUES (N'some_value', N'other_value');
COMMIT;
END
CLOSE cr_i
DEALLOCATE cr_i
我想你应该:
DECLARE @name nvarchar(100),
@exec nvarchar(500),
@c cursor,
@sql nvarchar(max);
SET @sql = N'BEGIN TRANSACTION;
ALTER TABLE [dbo].[IMP_IPID]
ADD [FSKB] int NOT NULL DEFAULT 0;
INSERT dbo.[__EFMH] ([MId], [PV])
VALUES (N''some_value'', N''other_value'');
COMMIT TRANSACTION;';
SET @c = CURSOR READ_ONY FORWARD_ONLY LOCAL STATIC FOR
SELECT
SUBSTRING(SUBSTRING([ICS], CHARINDEX('Initial Catalog=', [ICS])
+ LEN('Initial Catalog='), 100), 0,
CHARINDEX(';', SUBSTRING([ICS], CHARINDEX('Initial Catalog=', [ICS])
+ LEN('Initial Catalog='), 100)))
FROM [TCC].[dbo].T
WHERE ICS IS NOT NULL AND ICS <> '';
OPEN @c;
FETCH NEXT FROM @c INTO @name;
WHILE @@FETCH_STATUS <> -1
BEGIN
SET @exec = QUOTENAME(@name) + N'.sys.sp_executesql';
EXEC @exec @sql;
FETCH NEXT FROM @c INTO @name;
END