【发布时间】:2022-12-11 06:26:40
【问题描述】:
以下是我收到错误的查询
Declare @WorldpayAccountKeys varchar(max)='9132E282-2602-4D54-86CF-C93F9A56CF34
,E3759AFF-6968-40C1-8ABD-A25AE9176C1A
,B276D9C8-CC13-47C8-A469-76F8946AF6C0
,BCE689AD-CDC4-42D1-8718-69902ACCA9C3
,BCE689AD-CDC4-42D1-8718-69902ACCA9C4'
SELECT fooAccountId as abc, T.RowNum, T.Value
into #temp
FROM
(
SELECT O.Value, ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) as RowNum
FROM string_split(@WorldpayAccountKeys,',') O
) T
LEFT JOIN
foo R ON R.fooKey= T.Value
AND (R.foocId IN (11,12,13,14))
AND R.fooIndex = 0
我知道错误是针对列 fooAccountId 的,它是主键而不是 null,我从此查询中获取了一条针对列 fooAccountId 的空记录
我试过,将 null 应用于主键但它插入了临时表,为什么不使用上述查询
从 foo 中选择 fooAccountId 作为 abc 进入#b 联合所有 选择空
需要帮助,使用 sql server 2017
示例查询出错:
CREATE TABLE [dbo].[WA]( [WAid] [bigint] IDENTITY(1,1) NOT NULL, [WAKey] [uniqueidentifier] NOT NULL, [WATypeRefKey] [char](1) NOT NULL, [AccountId] [varchar](111) NULL, [AccountToken] [varchar](111) NULL, [AcceptorId] [varchar](111) NULL, [ApplicationId] [varchar](111) NULL, [ClientId] [int] NOT NULL, [Version] [int] NOT NULL, [VersionOn] [datetimeoffset](7) NOT NULL, [VersionBy] [varchar](111) NOT NULL, [RemovedIndex] [smallint] NOT NULL, CONSTRAINT [WA_PKey] PRIMARY KEY CLUSTERED ( [WAid] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO SET IDENTITY_INSERT [dbo].[WA] ON GO INSERT [dbo].[WA] ([WAid], [WAKey], [WATypeRefKey], [AccountId], [AccountToken], [AcceptorId], [ApplicationId], [ClientId], [Version], [VersionOn], [VersionBy], [RemovedIndex]) VALUES (1, N'9132e282-2602-4d54-86cf-c93f9a56cf34', N'Y', N'11', N'11', N'11', N'11', 11, 1, CAST(N'2022-11-30T00:00:00.0000000+00:00' AS DateTimeOffset), N'test', 0) GO INSERT [dbo].[WA] ([WAid], [WAKey], [WATypeRefKey], [AccountId], [AccountToken], [AcceptorId], [ApplicationId], [ClientId], [Version], [VersionOn], [VersionBy], [RemovedIndex]) VALUES (3, N'e3759aff-6968-40c1-8abd-a25ae9176c1a', N'Y', N'12', N'12', N'12', N'12', 12, 1, CAST(N'2022-12-01T18:14:11.5300000+00:00' AS DateTimeOffset), N'Test', 0) GO INSERT [dbo].[WA] ([WAid], [WAKey], [WATypeRefKey], [AccountId], [AccountToken], [AcceptorId], [ApplicationId], [ClientId], [Version], [VersionOn], [VersionBy], [RemovedIndex]) VALUES (6, N'b276d9c8-cc13-47c8-a469-76f8946af6c0', N'Y', N'13', N'13', N'13', N'13', 13, 1, CAST(N'2022-12-01T23:02:40.3164474+05:30' AS DateTimeOffset), N'Test', 0) GO INSERT [dbo].[WA] ([WAid], [WAKey], [WATypeRefKey], [AccountId], [AccountToken], [AcceptorId], [ApplicationId], [ClientId], [Version], [VersionOn], [VersionBy], [RemovedIndex]) VALUES (8, N'bce689ad-cdc4-42d1-8718-69902acca9c3', N'Y', N'134', N'14', N'14', N'14', 14, 1, CAST(N'2022-12-01T23:04:04.8758186+05:30' AS DateTimeOffset), N'Test', 0) GO INSERT [dbo].[WA] ([WAid], [WAKey], [WATypeRefKey], [AccountId], [AccountToken], [AcceptorId], [ApplicationId], [ClientId], [Version], [VersionOn], [VersionBy], [RemovedIndex]) VALUES (11, N'bce689ad-cdc4-42d1-8718-69902acca9c4', N'Y', N'135', N'15', N'15', N'15', 15, 1, CAST(N'2022-12-06T08:25:23.3533330+00:00' AS DateTimeOffset), N'Test', 0) GO Declare @WorldpayAccountKeys varchar(max)='9132E282-2602-4D54-86CF-C93F9A56CF34 ,E3759AFF-6968-40C1-8ABD-A25AE9176C1A ,B276D9C8-CC13-47C8-A469-76F8946AF6C0 ,BCE689AD-CDC4-42D1-8718-69902ACCA9C3 ,BCE689AD-CDC4-42D1-8718-69902ACCA9C4' drop table #temp SELECT [WAid] as abc, T.RowNum, T.Value into #temp FROM ( SELECT O.Value, ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) as RowNum FROM string_split(@WorldpayAccountKeys,',') O ) T LEFT JOIN [WA] R ON R.[WAKey]= T.Value AND (R.ClientId IN (11,12,13,14)) AND R.RemovedIndex = 0
【问题讨论】:
-
@Larnu 附加示例查询
-
那么...
BCE689AD-CDC4-42D1-8718-69902ACCA9C4的ClientId值是多少? -
解决方法是执行
SELECT [WAid]+0 as abc- 它似乎没有适当考虑该列可以为 NULL,因为该表是外部连接的 - 可能是因为SELECT INTO将保留IDENTITY属性 -
我删除它以查看用户是否传递了变量 WorldpayAccountKeys 但它们不存在于我的表中。这使我能够确定缺少哪些@WorldpayAccountKeys。
-
ISNULL 为我工作,但想知道导致错误的原因
标签: sql-server sql-server-2017