3

実稼働データベースで約3000行を検出する単純なSQLがあります。

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

出力をある種の大きな'INSERTINTO....'-sqlに変換してこのデータを同じテーブルに挿入する方法はありますか。そうすれば、SQLを他のSQL ServerManagementStudioウィンドウに簡単にコピーして実行できます。

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でselectとしてテーブルを作成できる場合は、次を使用できます。

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

SSMS Tools Packには、優れたGenerate Insert Statements関数 があります。http ://www.ssmstoolspack.com/ where句を簡単に入力して、エクスポートするデータだけを取得できます。これは以前は完全に無料でしたが、SSMS2012+で使用する場合は少額の料金が必要になります

より多くのお金があり、この種のことをたくさん行う必要がある場合は、RedGateのSQLData 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/

ニーズに合わせて変更できます。

二重引用符と一重引用符を見てください。彼らは計画にモンキーレンチを投げます。

これは、より大きなコード例のプレビューです。

2番目のSQLサーバーで実行できるコードを作成することに注意してください。

    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

これは、CompanyName列とAddress列で一重引用符を処理し、PrimaryKeyに「存在しない場所」チェックがあるNorthwindの例です。このテーブルにはint/numberがありませんが、一重引用符を削除するだけで機能することに注意してください。null値をチェックしたい場合、それはFax列に見られるような単純な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 に答える
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 に答える