2017-08-28 65 views
2

SQL Server Management Studioには、テーブルのデータの挿入ステートメントスクリプトを自動的に生成する "スクリプトの生成と公開ウィザード"というコンテキストメニューオプションがあります。SQL Serverのコマンドラインを使用してスクリプトを自動的に生成する方法は?

私の場合、私はコマンドラインを使ってデータベース上のクエリのみにアクセスできます。意味「スクリプトの生成と公開ウィザード」にアクセスできません。

純粋なSQLまたはT-SQLコマンドラインを使用して同様のことを達成できますか?

+3

あなたがアクセスできる場合、1つのオプションはPowershellでしょう。 [PowershellとSMOによる自動スクリプト生成 - Phil Factor](https://www.red-gate.com/simple-talk/sql/database-administration/automated-script-generation-with-powershell-and-smo/ ) – SqlZim

+0

ここでは、可能なものとできないものを書いてみましょう。https://dba.stackexchange.com/questions/95262/get-object-script-in-sql-server-via-t-sql –

答えて

0

システムビューに基づいて、インサートを構築する基本的なSQLです:あなたのテーブルがカバーされていない料理を持っている場合

DECLARE @sqlinsert AS VARCHAR(MAX) = '' 
DECLARE @tbl AS VARCHAR(128)='dbo.mytable' 

SET @sqlinsert = 'DECLARE 
' 

SELECT @sqlinsert = @sqlinsert + ' 
@ins_' + c.name + ' ' + t.name 
+ IIF(t.max_length>=8000,'('+ CONVERT(VARCHAR(16),c.max_length) +')','')+ ','--c.column_id, c.name,c.system_type_id,t.name,c.max_length,t.max_length,c.* 
FROM sys.tables a 
JOIN sys.schemas b ON a.schema_id = b.schema_id 
JOIN sys.columns c ON c.object_id = a.object_id 
JOIN sys.types t ON t.system_type_id = c.system_type_id AND t.system_type_id <> 231 
WHERE b.name+'.'+a.name = @tbl 
AND is_rowguidcol = 0 AND is_identity = 0 AND is_computed = 0 
ORDER BY c.column_id 

SET @sqlinsert = SUBSTRING(@sqlinsert,1,LEN(@sqlinsert)-1) 

SET @sqlinsert = @sqlinsert + ' 
Insert Into ' + @tbl + ' (' 

SELECT @sqlinsert = @sqlinsert + ' 
[' + c.name + '],'--c.column_id, c.name,c.system_type_id,t.name,c.max_length,t.max_length,c.* 
FROM sys.tables a 
JOIN sys.schemas b ON a.schema_id = b.schema_id 
JOIN sys.columns c ON c.object_id = a.object_id 
JOIN sys.types t ON t.system_type_id = c.system_type_id AND t.system_type_id <> 231 
WHERE b.name+'.'+a.name = @tbl 
AND is_rowguidcol = 0 AND is_identity = 0 AND is_computed = 0 
ORDER BY c.column_id 

SET @sqlinsert = SUBSTRING(@sqlinsert,1,LEN(@sqlinsert)-1) 
SET @sqlinsert = @sqlinsert + ') 
Values (' 

SELECT @sqlinsert = @sqlinsert + ' 
@ins_' + c.name + ','--c.column_id, c.name,c.system_type_id,t.name,c.max_length,t.max_length,c.* 
FROM sys.tables a 
JOIN sys.schemas b ON a.schema_id = b.schema_id 
JOIN sys.columns c ON c.object_id = a.object_id 
JOIN sys.types t ON t.system_type_id = c.system_type_id AND t.system_type_id <> 231 
WHERE b.name+'.'+a.name = @tbl 
AND is_rowguidcol = 0 AND is_identity = 0 AND is_computed = 0 
ORDER BY c.column_id 

SET @sqlinsert = SUBSTRING(@sqlinsert,1,LEN(@sqlinsert)-1) 
SET @sqlinsert = @sqlinsert + ')' 

SELECT @sqlinsert 

--SELECT * FROM sys.types 

おそらくあなたは、SYSの景色を読んで、いくつかの複数のフィルタ/例が必要な場合があります。

関連する問題