3

我有一个简单的 SQL,在生产数据库上找到大约 3000 行:

SELECT *
FROM [CONTOSO].[BATID] (NOLOCK)
WHERE COMPANYNO = 1
AND MEASURINGPOINT = '592-98901_NPT'
AND TIMESERIESNO = 1
AND DATE_TIME >= '2013-01-31 23:00:00'
AND DATE_TIME <= '2013-02-28 22:59:00'
ORDER BY DATE_TIME

有什么方法可以将输出转换为某种大的'INSERT INTO ....'-sql,将这些数据插入到同一个表中。然后我就可以轻松地将 sql 复制到另一个 SQL Server Management Studio 窗口并执行它。

4

6 回答 6

3

如果您的服务器未连接,您可以使用SSMS 导入/导出向导。此导出会创建一个数据文件,然后您可以将其导入远程服务器。

于 2013-03-26T14:34:48.707 回答
2

利用INSERT INTO..SELECT

INSERT INTO TableName (collName1, colName2,...)
SELECT * -- this should match to the names of column define in the INSERT clause
FROM [CONTOSO].[BATID] (NOLOCK)
WHERE COMPANYNO = 1
AND MEASURINGPOINT = '592-98901_NPT'
AND TIMESERIESNO = 1
AND DATE_TIME >= '2013-01-31 23:00:00'
AND DATE_TIME <= '2013-02-28 22:59:00'
于 2013-03-26T14:32:55.907 回答
1

如果您的 SQL 版本中可以使用 create table as select ,那么您可以使用以下命令:

Create table tab_name AS
 SELECT... your query...
于 2013-03-26T14:39:14.983 回答
0

您还可以创建链接服务器,然后将数据从一个表复制到链接服务器上的另一个表。

sp_addlinkedserver  
  @server= N'NameofLinkedServer',
  @srvproduct= N'',
  @provider= N'SQLNCLI',
  @datasrc= N'YourRemoteServer';

sp_addlinkedsrvlogin
  @rmtsrvname = 'NameofLinkedServer' ,
  @useself = 'FALSE' ,
  @locallogin = 'local_login' ,
  @rmtuser = 'remote_login' ,
  @rmtpassword = 'remote_password'

创建链接服务器后执行此 INSERT 语句

INSERT [NameofLinkedServer].[your_databaseName].[CONTOSO].[BATID](Column1, Column2, ...)
SELECT (Column1, Column2, ...)
FROM [CONTOSO].[BATID] (NOLOCK)
WHERE COMPANYNO = 1
AND MEASURINGPOINT = '592-98901_NPT'
AND TIMESERIESNO = 1
AND DATE_TIME >= '2013-01-31 23:00:00'
AND DATE_TIME <= '2013-02-28 22:59:00'
ORDER BY DATE_TIME

有关详细信息,请参阅MSDN 文档 

于 2013-03-26T15:01:04.040 回答
0

SSMS Tools Pack 有一个很棒的 Generate Insert Statements 功能: http ://www.ssmstoolspack.com/ 它允许您轻松输入 where 子句来获取您想要导出的数据。这曾经是完全免费的,但如果与 SSMS 2012+ 一起使用,现在需要支付少量费用

如果你有更多的钱并且需要做很多这种事情,那么 Red Gate 的 SQL Data Compare 是一个很棒的工具: https ://www.red-gate.com/products/sql-development/sql-data-compare /

于 2013-03-26T14:51:18.157 回答
0

您可以编写创建代码的代码。

我在这里为“MembershipProvider”数据库完成了它:http: //granadacoder.wordpress.com/2007/11/29/membershipprovider-helper-to-transfer-data/

您可以根据需要进行修改。

注意双引号和单引号,他们会在计划中抛出一个活动扳手。

这是更大的代码示例的预览:

注意,它创建的代码可以在第二个 sql server 上运行。

    select 
    'INSERT INTO dbo.aspnet_Applications ( ApplicationName,LoweredApplicationName,ApplicationId,[Description] ) values ('  as [--Comment], 
    char(39) + t1.ApplicationName + char(39) ,  ',' , 
    char(39) + t1.LoweredApplicationName + char(39) ,  ',' , 
    char(39) + convert(varchar(38)  , t1.ApplicationId ) + char(39) ,  ',' , 
    char(39) + t1.Description + char(39) 
    , ')'
     FROM
        dbo.aspnet_Applications t1

下面是一个 Northwind 示例,它处理 CompanyName 和 Address 列中的单引号,并对 PrimaryKey 进行“不存在”检查。请注意,此表没有任何整数/数字,但只需删除单引号即可。如果您想检查空值,这是一个简单的 case 语句,如传真列中所示。

Select 'INSERT INTO dbo.Customers ( CustomerID,CompanyName,ContactName,ContactTitle,[Address],City,Region,PostalCode,Country,Phone,Fax ) '   as [--Comment], 
'SELECT ' , 
char(39) + t1.CustomerID + char(39) ,  ',' , 
char(39) + REPLACE(t1.CompanyName , char(39) , char(39) + '+' + 'char(39)' + '+' +  char(39) ) + char(39) ,  ',' , 
char(39) + t1.ContactName + char(39) ,  ',' , 
char(39) + t1.ContactTitle + char(39) ,  ',' , 
char(39) + REPLACE(t1.[Address] , char(39) , char(39) + '+' + 'char(39)' + '+' +  char(39) ) + char(39) ,  ',' , 
char(39) + t1.City + char(39) ,  ',' , 
char(39) + t1.Region + char(39) ,  ',' , 
char(39) + t1.PostalCode + char(39) ,  ',' , 
char(39) + t1.Country + char(39) ,  ',' , 
char(39) + t1.Phone + char(39) ,  ',' , 
Fax = case
    when t1.Fax is null then 'null'
    else char(39) + t1.[Fax] + char(39) 
    end
, ' Where not exists (select null from dbo.Customers innerC where innerC.CustomerID = ' + char(39) + t1.CustomerID + char(39) + ')'
 FROM
dbo.Customers t1
于 2013-03-26T14:51:49.870 回答