使用查询到目标数据从 Microsoft SQL 服务器导出数据

Export data from Microsoft SQL Server using a query to target data

我知道如何生成脚本来编写插入行的脚本,从而允许我备份一些数据。我想知道是否有可能编写一个查询(以 WHERE 子句为例)以在非常大的 table?

中针对非常小的数据子集

最后,我想生成一个脚本,其中包含一堆插入行并允许插入主键值(通常不允许插入主键值)。

如果我没看错您的要求,您实际上想要做的只是复制 table 中的一些数据。我通常使用 SELECT INTO 来执行此操作。这也将为您生成目标 table。

CREATE TABLE myTable (Column1 int, column2 NVARCHAR(50))
;
INSERT INTO myTable VALUES (1, 'abc'), (2, 'bcd'), (3, 'cde'), (4, 'def')
;
SELECT * FROM myTable
;
SELECT 
    *
INTO myTable2
FROM myTable WHERE Column1 > 2
;

SELECT * FROM myTable;
SELECT * FROM myTable2;

DROP TABLE myTable;
DROP TABLE myTable2;

myTable 将包含以下内容:

Column1 column2
1   abc
2   bcd
3   cde
4   def

myTable2 将只有最后 2 行:

Column1 column2
3   cde
4   def

编辑:刚刚看到有关主键值的内容。这是否意味着您要将数据插入现有的 table,而不是仅仅创建一个备份集?如果是这样,您可以发出 SET IDENTITY_INSERT myTable2 ON 以允许这样做。

但是,请注意,如果您尝试插入的 ID 值已经存在,则可能会导致问题。

SSMS 不允许您对 table 中的特定行进行 INSERT 查询。您可以使用 GenerateInsert 存储过程来完成此操作。例如:

EXECUTE dbo.GenerateInsert @ObjectName = N'YourTableName'
,@SearchCondition='[ColumnName]=ColumnValue';

将为您提供与 @SearchCondition

中指定的过滤行类似的结果

假设您的 table 姓名是 Table1,其中包含 Salary & Name 列,并且您希望插入查询薪水大于 1000 且姓名以 [=15= 开头的人],那么你可以使用这个:

EXECUTE dbo.GenerateInsert @ObjectName = N'Table1'
,@SearchCondition='[Salary]>1000 AND [Name] LIKE ''Mr.%'''
,@PopulateIdentityColumn=1;