7

ftp および XML ファイルを介して SQL サーバーからオフサイトの場所にデータを転送するアプリケーションを構築しています。

を使用してクエリを介して各ファイルの XML データを作成していますFOR XML PATH('path'), TYPE

ファイル名を生成するために a を使用するGUIDだけでなく、ファイル内の識別子としても使用します。現在、テーブルを取得するための SQL は次のとおりです (簡略化)。

SELECT LVL1.inv_account_no
     , LVL1.cus_postcode
     , CONVERT(varchar(255),NEWID()) + '.xml' as FileName
     , (SELECT (SELECT CONVERT(varchar(255),NEWID()) FOR XML PATH('ident'), TYPE),  (

                SELECT.... [rest of very long nested select code for generating XML]

SQL フィドルの例

これは私に与えています:

Account Postcode  FileName                              xCol
AD0001  B30 3HX   2DF21466-2DA3-4D62-8B9B-FC3DF7BD1A00  <ident>656700EA-8FD5-4936-8172-0135DC49D200</ident>
AS0010  NN12 8TN  58339997-8271-4D8C-9C55-403DE98F06BE  <ident>78F8078B-629E-4906-9C6B-2AE21782DC1D</ident>

の行/使用ごとに基本的に異なる GUID ですNEWID()

カーソルをインクリメントしたり 2 回更新したりせずに、両方の列に同じ GUID を挿入する方法はありますか?

4

3 に答える 3

0

共通テーブル式を使用して、結果の各行の NEWID を生成できます。

これがSQLフィドルです:http://www.sqlfiddle.com/#!3/74c0c/1

CREATE TABLE TBL (
   ID INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
  GCOL VARCHAR(255),
  XCOL XML)

create table tbl2 (
  id int identity(1,1) not null primary key,
  foo int not null )

insert into tbl2 (foo) values
(10),(20),(30)

; WITH cte_a as ( select NEWID() as ID )
INSERT INTO TBL
SELECT CONVERT(varchar(255),cte_a.ID )
, (SELECT CONVERT(varchar(255),cte_a.ID) FOR XML PATH('Output'), TYPE)
from tbl2, cte_a
于 2013-06-20T00:31:32.967 に答える
0

一時変数を作成し、それに NEWID() を割り当てます。その後、この変数を SELECT または INSERT クエリで何度でも使用できます。一時変数の値は、スコープになるまで同じままです。次の例では、@gid は一時変数であり、GUID 値が VARCHAR(36) として割り当てられています。

DECLARE @gid varchar(36)
SET @gid = CAST(NEWID() AS VARCHAR(36))
INSERT INTO [tableName] (col1, col2) VALUES(@gid, @gid)

上記のクエリを実行すると、[テーブル名] の col1 と col2 は同じ GUID 値になります。

于 2020-08-06T11:41:21.123 に答える