【问题标题】:How to automatically generate script using command line in SQL Server?如何在 SQL Server 中使用命令行自动生成脚本?
【发布时间】:2017-08-28 12:53:15
【问题描述】:

在 SQL Server Management Studio 中,有一个“生成和发布脚本向导”上下文菜单选项,可自动为表数据生成插入语句脚本。

就我而言,我只能使用命令行对数据库进行查询。这意味着我无法访问“生成和发布脚本向导”。

是否可以使用纯 SQL 或 T-SQL 命令行实现类似的功能?

【问题讨论】:

标签: sql sql-server tsql


【解决方案1】:

这是一个基于系统视图的基本 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 视图。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-25
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多