SQL 游标插入一台服务器中的多个数据库

问题描述 投票:0回答:1

在同一台服务器上,我有大约 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
sql sql-server insert cursor alter
1个回答
0
投票

我想你应该:

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
© www.soinside.com 2019 - 2024. All rights reserved.