Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как выполнить скрипт из переменной?  [new]
vba-dev
Member

Откуда:
Сообщений: 36
Есть такой скрипт, создающий скрипт:
+
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), то выполнение заканчивается ошибой.
Подскажите, как можно выполнить такой скрипт?
17 июл 16, 07:40    [19420094]     Ответить | Цитировать Сообщить модератору
 Re: Как выполнить скрипт из переменной?  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 6201
Предлагаете догадаться, что там была за ошибка?
17 июл 16, 09:26    [19420142]     Ответить | Цитировать Сообщить модератору
 Re: Как выполнить скрипт из переменной?  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 6201
P.S. Уберите из всего вашего скрипта GO, предшествующие конструкции заканчивайте с помощью ;
https://msdn.microsoft.com/en-us/library/ms188037.aspx :
GO is not a Transact-SQL statement; it is a command recognized by the sqlcmd and osql utilities and SQL Server Management Studio Code editor.
17 июл 16, 09:31    [19420151]     Ответить | Цитировать Сообщить модератору
 Re: Как выполнить скрипт из переменной?  [new]
vba-dev
Member

Откуда:
Сообщений: 36
Сон Веры Павловны, спасибо, разобрался с GO. Не подумалось, что он неприменим для сценария, выполняемого сервером, а не SSMS.
17 июл 16, 11:11    [19420243]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить