在数据库中,我有带有数据的#temp表,需要生成所有数据的插入脚本。
如何完成?我右键单击了tempDB,选择>任务>生成脚本,但无法选择#temp表来生成脚本(不能选择)。
我该如何从#temp表生成插入脚本?我使用的是SQL Server 2008 R2。
如何完成?我右键单击了tempDB,选择>任务>生成脚本,但无法选择#temp表来生成脚本(不能选择)。
我该如何从#temp表生成插入脚本?我使用的是SQL Server 2008 R2。
SELECT * INTO myTempTable FROM (query results)
例如:SELECT * INTO myTempTable FROM user where condition
将在 dbo
模式下创建名为 myTempTable
的表。然后点击数据库,选择:
任务 > 生成脚本
选择表myTempTable
。
#
用作表名的前缀。如果使用“生成脚本”时,您将无法找到该表。(注:此翻译为更加通俗易懂的表达方式,但保留了原文的意思和语法结构。) - Natrium您可以使用以下查询批处理程序为临时表
生成脚本,并根据条件选择行。我从这里获取了这个批处理程序。在原始来源中,作者创建了用于生成脚本的存储过程
。我已经格式化和修改以声明带有条件的TableName
。您需要在tempdb
中运行此查询批处理程序,并使用您的#temp table name
。感谢Neeraj Prasad Sharma。
DECLARE @QUERY VARCHAR(MAX) = 'Dbo.#Temp where 1 = 1'
SET NOCOUNT ON
DECLARE @WithStrINdex AS INT
DECLARE @WhereStrINdex AS INT
DECLARE @INDExtouse AS INT
DECLARE @SchemaAndTAble VARCHAR(270)
DECLARE @Schema_name VARCHAR(30)
DECLARE @Table_name VARCHAR(240)
DECLARE @Condition VARCHAR(MAX)
SELECT @WithStrINdex = 0
SELECT @WithStrINdex = CHARINDEX('WITH', @Query), @WhereStrINdex = CHARINDEX('WHERE', @Query)
IF(@WithStrINdex != 0)
SELECT @INDExtouse = @WithStrINdex
ELSE
SELECT @INDExtouse = @WhereStrINdex
SELECT @SchemaAndTAble = LEFT(@Query, @INDExtouse - 1)
SELECT @SchemaAndTAble = LTRIM(RTRIM(@SchemaAndTAble))
SELECT @Schema_name = LEFT(@SchemaAndTAble, CHARINDEX('.', @SchemaAndTAble ) - 1)
,@Table_name = SUBSTRING(@SchemaAndTAble, CHARINDEX('.', @SchemaAndTAble ) + 1, LEN(@SchemaAndTAble))
,@CONDITION = SUBSTRING(@Query, @WhereStrINdex + 6, LEN(@Query))--27+6
DECLARE @COLUMNS TABLE([Row_number] SMALLINT, Column_Name VARCHAR(MAX))
DECLARE @CONDITIONS AS VARCHAR(MAX)
DECLARE @Total_Rows AS SMALLINT
DECLARE @Counter AS SMALLINT
DECLARE @ComaCol AS VARCHAR(MAX)
SELECT @ComaCol = '', @Counter = 1, @CONDITIONS = ''
print @Schema_name
print @Table_name
INSERT INTO @COLUMNS
SELECT ROW_NUMBER() OVER(ORDER BY ORDINAL_POSITION) [Count] ,COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = @Schema_name
AND TABLE_NAME = @Table_name
AND COLUMN_NAME NOT IN ('SYNCDESTINATION','PENDINGSYNCDESTINATION' ,'SKUID','SALECREDITEDTO')
SELECT @Total_Rows = COUNT(*) FROM @COLUMNS
SELECT @Table_name = '['+@Table_name+']'
SELECT @Schema_name = '['+@Schema_name+']'
WHILE (@Counter< = @Total_Rows )
BEGIN
SELECT @ComaCol = @ComaCol + ' ['+Column_Name+'],' FROM @COLUMNS
Where [Row_number] = @Counter
SELECT @CONDITIONS = @CONDITIONS+ ' + CASE WHEN ['+Column_Name+'] IS NULL THEN ''NULL'' ELSE '''''''' +
REPLACE( CONVERT(VARCHAR(MAX),['+Column_Name+']) ,'''''''','''')
+'''''''' END +'+''','''
FROM @COLUMNS WHERE [Row_number] = @Counter
SET @Counter = @Counter + 1
END
SELECT @CONDITIONS = RIGHT(@CONDITIONS, LEN(@CONDITIONS) -2)
SELECT @CONDITIONS = LEFT(@CONDITIONS, LEN(@CONDITIONS) -4)
SELECT @ComaCol = SUBSTRING (@ComaCol, 0, LEN(@ComaCol))
SELECT @CONDITIONS = '''INSERT INTO ' + @Schema_name + '.' + @Table_name + '(' + @ComaCol + ')' +' VALUES( '+'''' + '+' + @CONDITIONS
SELECT @CONDITIONS = @CONDITIONS + '+' + ''')'''
SELECT @CONDITIONS = 'SELECT' + @CONDITIONS + 'FROM' + @Schema_name + '.' + @Table_name + ' WITH(NOLOCK) ' + ' WHERE ' + @Condition
PRINT(@CONDITIONS)
EXEC(@CONDITIONS)
另一种更快但更长的方法是:
使用SqlPubWiz
只需前往:
C:\Program Files (x86)\Microsoft SQL Server\90\Tools\Publishing\1.4
运行并填写有关登录到数据库的必要信息,选择您的数据库并获取整个数据库脚本,然后在保存的脚本文件中查找所需表的插入脚本。
您需要右键单击数据库,然后点击
Tasks -> Generate Scripts
现在你有一个弹出屏幕,请点击下一步
Select specific database objects
现在从“表”选项中选择您的表,然后单击“下一步”,现在您有一个高级按钮,请单击它。
您将有另一个小弹出屏幕可用,选择要脚本化的数据类型并选择。
Data only
点击“确定”,不要忘记将路径作为文件名,仔细保存您的脚本。
现在点击“下一步”,再次点击“下一步”,您的脚本已准备好使用数据了。
SELECT * INTO
将其转移到一个新表中,然后生成一个脚本吗? - ughaiSELECT
语句,就像这样SELECT * INTO Tbl1 FROM #temp1
。表格会自动创建。请查阅相关资料。 - ughai