我有两个表Table1
和Table2
。
我想用以下格式的Table1
中的数据更新Table2
。
当JobId
相同时,以逗号分隔的值:
Table1ColumnName Update = (Quantity * Length [TYPE] ---Table2 Column)
表1
表2
预期结果将与此非常相似
答案 0 :(得分:0)
请尝试以下代码。请记住,UPDATE是一个冒险的操作,请首先尝试将代码与测试数据一起使用。
CommonUtility.stGetAccessTokenUrl = string.Format(CommonUtility.stGetAccessTokenUrl, CommonUtility.tenantID);
myWebRequest = WebRequest.Create(CommonUtility.stGetAccessTokenUrl);
myWebRequest.ContentType = "application/x-www-form-urlencoded";
myWebRequest.Method = "POST";
// Add the below body attributes to the request
/*
* grant_type client_credentials client_credentials
client_id ClientID@TenantID
client_secret ClientSecret
resource resource/SiteDomain@TenantID resourceid/abc.sharepoint.com@tenantID
*/
var postData = "grant_type=client_credentials";
postData += "&client_id=" + CommonUtility.stClientID + "@" + CommonUtility.tenantID;
postData += "&client_secret=" + (CommonUtility.stClientSecret);
postData += "&resource=" + CommonUtility.resourceID + "/" + CommonUtility.stSiteDomain + "@" + CommonUtility.tenantID;
var data = Encoding.ASCII.GetBytes(postData);
using (var stream = myWebRequest.GetRequestStream())
{
stream.Write(data, 0, data.Length);
}
var response = (HttpWebResponse)myWebRequest.GetResponse();
var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
string[] stArrResponse = responseString.Split(',');
//get the access token and expiry time ,etc
foreach (var stValues in stArrResponse)
{
if (stValues.StartsWith("\"access_token\":"))
{
//Console.WriteLine(" Result => " + stValues);
accessToken = stValues.Substring(16);
//Console.WriteLine(" Result => " + accessToken);
accessToken = accessToken.Substring(0, accessToken.Length - 2);
// Console.WriteLine(" Result => " + accessToken);
}
}
答案 1 :(得分:0)
尝试此查询:
update t1 set CD_ContrType = cast(t2.Quantity as varchar(10)) + '*' + t2.Length
from table1 t1
join table2 t2 on t1.MainJob_Id = t2.MainJob_Id
答案 2 :(得分:0)
这可能是个坏主意。通常,存储逗号分隔的值不是一个好方法。但是,如果您只是出于演示目的而这样做,则可能不是一个坏主意。
在SQL Server中,可以将FOR XML PATH
用于字符串连接:
update t1
set cd_contrtype = t2.new_cd_contrtype
from table1 t1 join
(select t2.main_job_id,
stuff( (select concat(', ', tt2.quantity, ' * ', tt2.length, ' ', tt2.type)
from table2 tt2
where tt2.main_job_id = t2.main_job_id
for xml path ('')
), 1, 2, ''
) as new_cd_contrtype
from (select distinct main_job_id from table2 t2) t2
group by t2.main_job_id
)
on t2.main_job_id = t1.main_job_id
答案 3 :(得分:0)
请检查此查询,但是我建议您重新考虑您的方法,因为存储逗号分隔值不是一个好主意:
创建示例数据
Declare @Table1 table(
CD_Contr_Type varchar(250),
MainJob_Id varchar(100)
)
Insert into @Table1 values (NULL, '201900002')
Insert into @Table1 values (NULL, '201900004')
Insert into @Table1 values (NULL, '201900006')
Insert into @Table1 values (NULL, '201900008')
Insert into @Table1 values (NULL, '201900010')
Insert into @Table1 values (NULL, '201900012')
Insert into @Table1 values (NULL, '201900013')
Insert into @Table1 values (NULL, '201900015')
Declare @Table2 table(
MainJob_Id varchar(100),
Quantity decimal(5,3),
Length varchar(20),
Type varchar(100)
)
Insert into @Table2 values('201900002', 1.000, '20Feet', 'Flat Rate')
Insert into @Table2 values('201900004', 1.000, '20Feet', 'Bulk')
Insert into @Table2 values('201900004', 2.000, '40Feet', 'Bulk')
Insert into @Table2 values('201900006', 1.000, '20Feet', 'General Purpose')
Insert into @Table2 values('201900008', 1.000, '20Feet', 'Bulk')
Insert into @Table2 values('201900010', 1.000, '20Feet', 'Bulk')
Insert into @Table2 values('201900012', 1.000, '20Feet', 'High Cube')
Insert into @Table2 values('201900013', 1.000, NULL, 'Loose Cargo')
Insert into @Table2 values('201900015', 1.000, '20Feet', 'General Purpose')
最终更新查询
Update A set CD_Contr_Type = UpdateVal from @Table1 A inner join (
Select MainJob_Id,
(Select Cast(Cast(Quantity as int) as varchar) + ' * ' + Length + ' ' + Type + ', '
from @Table2 t2
where t2.MainJob_Id = t1.MainJob_Id for XML Path('')) as UpdateVal
from @Table1 t1
group by MainJob_Id) B on A.MainJob_Id = B.MainJob_Id