每行使用两次相同的GUID

时间:2013-06-19 21:19:24

标签: sql-server xml sql-server-2008 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 Example

这给了我:

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插入到两列中?

3 个答案:

答案 0 :(得分:6)

尝试这样的事情:

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

&#34; GeneratedGuid&#34;每行都有不同的GUID。

答案 1 :(得分: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

答案 2 :(得分: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值。