Есть такой скрипт, создающий скрипт:
если текст собранной команды выполнить в окне SSMS, то он выполняется без ошибок. А если пытаться выполнить exec (@cmd), то выполнение заканчивается ошибой.
Подскажите, как можно выполнить такой скрипт?
+ |
DECLARE @t_Src sysname = 'tst' , @t_Dst sysname , @cmd nvarchar(max)='' SET @t_Dst = 'log_' + @t_Src --=========================================================================================== IF not exists(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = @t_Dst) SET @cmd = @cmd + CHAR(10) +'USE ' + QUOTENAME(DB_NAME()) + CHAR(10) +'GO' + CHAR(10) +'BEGIN TRANSACTION' + CHAR(10) +'GO' + CHAR(10) +'CREATE TABLE dbo.' + QUOTENAME(@t_Dst) + CHAR(10) +'(' + CHAR(10) +' prDt datetime NULL,' + CHAR(10) +' prVid nchar(1) NULL,' + CHAR(10) +' prComp nvarchar(128) NULL,' + CHAR(10) +' prDB nvarchar(128) NULL,' + CHAR(10) +' prUser nvarchar(128) NULL,' + CHAR(10) +' prKeyW int NULL' + CHAR(10) +' ) ON [PRIMARY]' + CHAR(10) +'GO' + CHAR(10) +'DECLARE @v sql_variant ' + CHAR(10) +'SET @v = N''дата изменения''' + CHAR(10) +'EXECUTE sp_addextendedproperty N''MS_Description'', @v, N''SCHEMA'', N''dbo'', N''TABLE'', N' + QUOTENAME(@t_Dst,'''') + ', N''COLUMN'', N''prDt''' + CHAR(10) +'GO' + CHAR(10) +'DECLARE @v sql_variant ' + CHAR(10) +'SET @v = N''тип изменения - Д И У''' + CHAR(10) +'EXECUTE sp_addextendedproperty N''MS_Description'', @v, N''SCHEMA'', N''dbo'', N''TABLE'', N'+ QUOTENAME(@t_Dst,'''') + ', N''COLUMN'', N''prVid''' + CHAR(10) +'GO' + CHAR(10) +'DECLARE @v sql_variant ' + CHAR(10) +'SET @v = N''компьютер, который сделал изменения''' + CHAR(10) +'EXECUTE sp_addextendedproperty N''MS_Description'', @v, N''SCHEMA'', N''dbo'', N''TABLE'', N'+ QUOTENAME(@t_Dst,'''') + ', N''COLUMN'', N''prComp''' + CHAR(10) +'GO' + CHAR(10) +'DECLARE @v sql_variant ' + CHAR(10) +'SET @v = N''Для какой базы сделаны изменения''' + CHAR(10) +'EXECUTE sp_addextendedproperty N''MS_Description'', @v, N''SCHEMA'', N''dbo'', N''TABLE'', N'+ QUOTENAME(@t_Dst,'''') + ', N''COLUMN'', N''prDB''' + CHAR(10) +'GO' + CHAR(10) +'DECLARE @v sql_variant ' + CHAR(10) +'SET @v = N''пользователь, который внес изменения''' + CHAR(10) +'EXECUTE sp_addextendedproperty N''MS_Description'', @v, N''SCHEMA'', N''dbo'', N''TABLE'', N'+ QUOTENAME(@t_Dst,'''') + ', N''COLUMN'', N''prUser''' + CHAR(10) +'GO' + CHAR(10) +'DECLARE @v sql_variant ' + CHAR(10) +'SET @v = N''пользователь в приложении, который внес изменения''' + CHAR(10) +'EXECUTE sp_addextendedproperty N''MS_Description'', @v, N''SCHEMA'', N''dbo'', N''TABLE'', N'+ QUOTENAME(@t_Dst,'''') + ', N''COLUMN'', N''prKeyW''' + CHAR(10) +'GO' + CHAR(10) +'ALTER TABLE dbo.'+ QUOTENAME(@t_Dst) + ' ADD CONSTRAINT' + CHAR(10) +' DF_'+ @t_Dst + '_prDt DEFAULT (getdate()) FOR prDt' + CHAR(10) +'GO' + CHAR(10) +'ALTER TABLE dbo.'+ QUOTENAME(@t_Dst) + ' SET (LOCK_ESCALATION = TABLE)' + CHAR(10) +'GO' + CHAR(10) +'COMMIT' --=========================================================================================== print @cmd exec (@cmd) |
если текст собранной команды выполнить в окне SSMS, то он выполняется без ошибок. А если пытаться выполнить exec (@cmd), то выполнение заканчивается ошибой.
Подскажите, как можно выполнить такой скрипт?