2
在SQL Server Management Studio中,有一個「生成併發布腳本嚮導」上下文菜單選項,可以自動爲表數據生成插入語句腳本。如何使用SQL Server中的命令行自動生成腳本?
在我的情況下,我只能訪問使用命令行的數據庫查詢。含義我無法訪問「生成和發佈腳本嚮導」。
使用純SQL或T-SQL命令行可以實現類似的功能嗎?
在SQL Server Management Studio中,有一個「生成併發布腳本嚮導」上下文菜單選項,可以自動爲表數據生成插入語句腳本。如何使用SQL Server中的命令行自動生成腳本?
在我的情況下,我只能訪問使用命令行的數據庫查詢。含義我無法訪問「生成和發佈腳本嚮導」。
使用純SQL或T-SQL命令行可以實現類似的功能嗎?
這是一個基本的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意見的情況。
一個選項是Powershell,如果你有權訪問它。 [使用Powershell和SMO自動生成腳本 - Phil因子](https://www.red-gate.com/simple-talk/sql/database-administration/automated-script-generation-with-powershell-and-smo/ ) – SqlZim
這是一個很好的寫什麼是和不可能的https://dba.stackexchange.com/questions/95262/get-object-script-in-sql-server-via-t-sql –