我正在构建一个应用程序,通过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值