【发布时间】:2020-12-08 12:15:10
【问题描述】:
我有一个返回 1 列的查询 此列是包含更新语句的字符串 如何通过运行此查询来运行所有更新?
SELECT 'UPDATE TOP (' + CAST([Deploy] AS varchar(10)) + ') TRV
SET TRV.SourceStationID = ' + CAST([Station_From] AS varchar(10)) + ',
TRV.MissingStationSourceCode = 888
FROM [Tickets].[dbo].TCK_STG_Fact_Contract_Magnetic_Travels1 TRV
LEFT OUTER JOIN [Tickets].[dbo].[TCK_DWH_Dim_Date] DAT ON CAST(TRV.[ExitDate] AS DATE) = CAST(DAT.Date AS DATE)
LEFT OUTER JOIN [Tickets].[dbo].[TCK_DWH_Dim_Manual_PartOfDay] POD ON DATEPART(HOUR,TRV.[ExitDate]) = POD.PartOfDay_Hour
WHERE DAT.Day_Type_Code = ' + CAST([Day_Type_Code] AS varchar(10)) + '
AND POD.PartOfDay_Code = ' + CAST([PartOfDay_Code] AS varchar(10)) + '
AND TRV.DestinationStation = ' + CAST([DestinationStation] AS varchar(10)) + '
AND TRV.SourceStationID IS NULL'
FROM [Tickets].[dbo].[TCK_TMP_Fact_ALL_Travels_History_FromMissing]
【问题讨论】:
-
这是动态 SQL。您需要使用
exec(或者更好的是exec spexecutesql来运行代码。 -
这看起来像一个严重的XY Problem。您为什么不从头开始,告诉我们您在此处真正想要达到的目标。
-
另外,带有
TOP的UPDATE很奇怪,但是带有TOP且没有ORDER BY的UPDATE是非常 不一致的结果(不是说你可以在UPDATE中有一个ORDER BY,以及为什么有一个TOP很奇怪)。 -
我支持这似乎是XY Problem,我们需要了解您的真正目标是什么。
-
@Gines:您需要使用游标遍历结果并为每一行使用
EXEC(或sp_executesql)。但我在这里和拉努在一起。如果您在此处解释您尝试解决的潜在问题,您将获得更好的帮助。
标签: sql sql-server tsql sql-update