7

我正在构建一个应用程序,通过 ftp 和 XML 文件将数据从 SQL 服务器传输到异地位置。

我正在通过查询为每个文件构建 XML 数据FOR XML PATH('path'), TYPE

我将使用 aGUID来生成文件名以及用作文件中的标识符,目前我获取表的 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>

每一行/使用NEWID().

有没有一种方法可以在不增加光标或进行两次更新的情况下将相同的 GUID 插入两列?

4

3 回答 3

11

尝试这样的事情:

SELECT GeneratedGuid, GeneratedGuid
FROM YourTable
LEFT JOIN (SELECT NEWID() AS GeneratedGuid) AS gg ON 1 = 1

“GeneratedGuid”对每一行都有不同的 GUID。

于 2014-10-29T13:13:11.537 回答
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)

从 [tablename] 执行上述查询 col1 和 col2 后将具有相同的 guid 值。

于 2020-08-06T11:41:21.123 回答