每行使用两次相同的GUID



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

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

我将使用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 Fiddle示例

这是给我的:

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。

是否有一种方法可以将相同的GUID插入到两个列中,而不增加游标或进行两次更新?

试试这样:

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

"GeneratedGuid"每一行都有一个不同的GUID

您可以使用公共表表达式为每个结果行生成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

创建一个临时变量并为其分配一个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从[tableame]将有相同的guid值

相关内容

  • 没有找到相关文章

最新更新