2012-07-18 22 views
1

我需要在現有的script的底部添加/附加文本(SQL)。如何將文本寫入/附加到n SQL腳本的底部?

我有一個STORED PROCEDURE,爲我生成INSERT statements。他們退出分配,所以目前我複製並通過所需的scripts

這基本上是SQL的樣子:

SELECT '' + CHAR(13) + CHAR(10) + 'EXECUTE [procSystemAppEntity_InsertOrUpdate] ' + CHAR(13) + CHAR(10) + ' @SystemUID = @SystemUID' + CHAR(13) + CHAR(10) 
+ ',@SystemAppCode = @SystemAppCode' + CHAR(13) + CHAR(10) 
+ ',@SystemAppEntityTypeCode = N''' + saet.[SystemAppEntityTypeCode] + '''' + CHAR(13) + CHAR(10) 
+ ',@SystemAppEntityUID = '''+ CAST((SELECT NEWID()) AS nvarchar(max)) + '''' + CHAR(13) + CHAR(10) 
+ ',@SystemAppEntityCode = ''' + tab.name + '''' + CHAR(13) + CHAR(10) 
+ ',@SystemAppEntityName = N''' + tab.name + '''' + CHAR(13) + CHAR(10) 
+ ',@TableName = N''' + tab.name + '''' + CHAR(13) + CHAR(10) 
+ ',@TableKeyColumnName = N''' + tab.name + 'ID''' + CHAR(13) + CHAR(10) 
+ ',@TableKeyCodeColumnName = N''' + tab.name + 'Code''' + CHAR(13) + CHAR(10) 
+ ',@ManagedAssemblyName = N''' + CASE WHEN @SystemAppEntityManagedAssemblyName IS NULL THEN '' ELSE @SystemAppEntityManagedAssemblyName END + '''' + CHAR(13) + CHAR(10) 
+ ', @ManagedNamespace = N''' + CASE WHEN @SystemAppEntityManagedNamespace IS NULL THEN '' ELSE @SystemAppEntityManagedNamespace END + '''' + CHAR(13) + CHAR(10) 
+ ', @ManagedClassName = ''' + tab.name + '''' + CHAR(13) + CHAR(10) 
+ ', @IsMultiple = ' + CAST(@IsMultiple AS varchar(1)) + CHAR(13) + CHAR(10) 
+ ', @IsCodeGenerated = 1' + CHAR(13) + CHAR(10) 
+ ', @IsActive = 1' + CHAR(13) + CHAR(10) 
+ ', @SystemAppUserID = @CreationSystemAppUserID ' + CHAR(13) + CHAR(10) + '; ' 
FROM sys.tables tab INNER JOIN 
    [SystemAppEntityType] saet ON saet.[IsMultipleEntity] = CASE WHEN RIGHT(tab.name, 1) = 's' THEN 1 ELSE 0 END AND saet.[IsNavigationEntity] = 0 AND saet.IsSystemEntity = CASE WHEN LEFT(tab.name, 3) = 'Sys' THEN 1 ELSE 0 END 
WHERE (tab.name NOT IN (SELECT e.[TableName] FROM [SystemAppEntity] e)) 
    AND (tab.name = @Code) 

隨着輸出:

EXECUTE [procSystemAppEntity_InsertOrUpdate] 
@SystemUID = @SystemUID 
,@SystemAppCode = @SystemAppCode 
,@SystemAppEntityTypeCode = N'App-S' 
,@SystemAppEntityUID = '11E347C7-7E69-4555-A6F0-2AFE142FC25F' 
,@SystemAppEntityCode = 'Revision' 
,@SystemAppEntityName = N'Revision' 
,@TableName = N'Revision' 
,@TableKeyColumnName = N'RevisionID' 
,@TableKeyCodeColumnName = N'RevisionCode' 
,@ManagedAssemblyName = N'SomeManagedAssemblyName ' 
, @ManagedNamespace = N'SomeManagedNamespace ' 
, @ManagedClassName = 'Revision' 
, @IsMultiple = 0 
, @IsCodeGenerated = 1 
, @IsIntegratedToStaging = 1 
, @IsActive = 1 
, @SystemAppUserID = @CreationSystemAppUserID 
; 

話雖這麼說,是有辦法,我也許可以寫/直接追加Output statements到所需的腳本?

我只是想要它添加到腳本的底部。這是可能的,如果是這樣,我將如何實現這一目標?

回答

1
SELECT '' + CHAR(13) + CHAR(10) + 'EXECUTE [procSystemAppEntity_InsertOrUpdate] ' + CHAR(13) + CHAR(10) + ' @SystemUID = @SystemUID' + CHAR(13) + CHAR(10) 
+ ',@SystemAppCode = @SystemAppCode' + CHAR(13) + CHAR(10) 
+ ',@SystemAppEntityTypeCode = N''' + saet.[SystemAppEntityTypeCode] + '''' + CHAR(13) + CHAR(10) 
+ ',@SystemAppEntityUID = '''+ CAST((SELECT NEWID()) AS nvarchar(max)) + '''' + CHAR(13) + CHAR(10) 
+ ',@SystemAppEntityCode = ''' + tab.name + '''' + CHAR(13) + CHAR(10) 
+ ',@SystemAppEntityName = N''' + tab.name + '''' + CHAR(13) + CHAR(10) 
+ ',@TableName = N''' + tab.name + '''' + CHAR(13) + CHAR(10) 
+ ',@TableKeyColumnName = N''' + tab.name + 'ID''' + CHAR(13) + CHAR(10) 
+ ',@TableKeyCodeColumnName = N''' + tab.name + 'Code''' + CHAR(13) + CHAR(10) 
+ ',@ManagedAssemblyName = N''' + CASE WHEN @SystemAppEntityManagedAssemblyName IS NULL THEN '' ELSE @SystemAppEntityManagedAssemblyName END + '''' + CHAR(13) + CHAR(10) 
+ ', @ManagedNamespace = N''' + CASE WHEN @SystemAppEntityManagedNamespace IS NULL THEN '' ELSE @SystemAppEntityManagedNamespace END + '''' + CHAR(13) + CHAR(10) 
+ ', @ManagedClassName = ''' + tab.name + '''' + CHAR(13) + CHAR(10) 
+ ', @IsMultiple = ' + CAST(@IsMultiple AS varchar(1)) + CHAR(13) + CHAR(10) 
+ ', @IsCodeGenerated = 1' + CHAR(13) + CHAR(10) 
+ ', @IsActive = 1' + CHAR(13) + CHAR(10) 
+ ', @SystemAppUserID = @CreationSystemAppUserID ' + CHAR(13) + CHAR(10) + '; 
Insert into table(...) ;' 
FROM sys.tables tab INNER JOIN 
    [SystemAppEntityType] saet ON saet.[IsMultipleEntity] = CASE WHEN RIGHT(tab.name, 1) = 's' THEN 1 ELSE 0 END AND saet.[IsNavigationEntity] = 0 AND saet.IsSystemEntity = CASE WHEN LEFT(tab.name, 3) = 'Sys' THEN 1 ELSE 0 END 
WHERE (tab.name NOT IN (SELECT e.[TableName] FROM [SystemAppEntity] e)) 
    AND (tab.name = @Code) 
+0

請參閱編輯:'這是說,有沒有辦法,我可以寫/附加輸出語句直接到所需的腳本? – Willem 2012-07-18 09:27:21

+0

輸出聲明是什麼意思? – Madhivanan 2012-07-18 09:45:55

+0

您複製的語句會生成實際的PROCEDURE語句(請參閱我的問題)。我只是想將它追加到所需腳本的底部。你在答案中的代碼片段是實際生成的語句的一小部分。有大約10個這些陳述... – Willem 2012-07-18 10:08:46

0

您正在使用什麼版本的SQL Server?

如果您使用的是SQL Server 2008+,那麼您可以通過生成腳本實用程序本身生成INSERT腳本。

在SQL Server 2005或之前(我也曾在SQL 2K中嘗試過),然後有一個非常好的基礎過程,它可以爲給定的表生成INSERT腳本。檢查出http://vyaskn.tripod.com/code/generate_inserts.txt

+0

請參閱編輯:'這是說,有沒有辦法,我可以寫/附加輸出語句直接到所需的腳本? – Willem 2012-07-18 09:27:40

相關問題