我正在构建一个应用程序,通过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]
这给了我:
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插入到两列中?
答案 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值。