使用查询到目标数据从 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;
我知道如何生成脚本来编写插入行的脚本,从而允许我备份一些数据。我想知道是否有可能编写一个查询(以 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;