2

AWS RDS データベース サービス内に SQL Server 2012 Web Edition があります。照合はデフォルトのものです: SQL_Latin1_General_CP1_CI_AS.

テーブルの1つに、MODIFIED_BYタイプvarchar(128)の列があります-列の照合はデフォルトです。

この列に格納される通常の値は GUIDS ですが、ハードコードされているいくつかの値は例外ですSystem。ご覧のとおり、ID を保存する監査証跡トランザクションを保存するためのテーブル、またはSystem移行の一部として変更が行われたかどうかを確認するためのテーブルです。

とにかく - 上記のすべては単なる文脈でした。今奇妙な問題:

以下を実行すると、レコードが取得されませんが、取得する必要があります。

select *
from AUDIT_LOG_TRANSACTIONS alt
where lower(ltrim(rtrim(alt.MODIFIED_BY)))='system'

また

select *
from AUDIT_LOG_TRANSACTIONS alt
where lower(ltrim(rtrim(alt.MODIFIED_BY)))=convert(varchar,'system')

また

select *
from AUDIT_LOG_TRANSACTIONS alt
where lower(ltrim(rtrim(alt.MODIFIED_BY)))=convert(varchar(128),'system')

次を実行すると、レコードが取得されます。

select *
from AUDIT_LOG_TRANSACTIONS alt
where alt.MODIFIED_BY like '%System%'

また

select *
from AUDIT_LOG_TRANSACTIONS alt
where lower(ltrim(rtrim(CAST(alt.MODIFIED_BY AS nvarchar(max)))))='system'

更新
テーブル作成スクリプトは次のとおりです。

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

SET ANSI_PADDING ON
GO

CREATE TABLE [dbo].[AUDIT_LOG_TRANSACTIONS](
    [AUDIT_LOG_TRANSACTION_ID] [int] IDENTITY(1,1) NOT NULL,
    [DATABASE] [nvarchar](128) NOT NULL,
    [TABLE_NAME] [nvarchar](261) NOT NULL,
    [TABLE_SCHEMA] [nvarchar](261) NOT NULL,
    [AUDIT_ACTION_ID] [tinyint] NOT NULL,
    [HOST_NAME] [varchar](128) NOT NULL,
    [APP_NAME] [varchar](128) NOT NULL,
    [MODIFIED_BY] [varchar](128) NOT NULL,
    [MODIFIED_DATE] [datetime] NOT NULL,
    [AFFECTED_ROWS] [int] NOT NULL,
    [SYSOBJ_ID]  AS (object_id([TABLE_NAME])),
PRIMARY KEY CLUSTERED 
(
    [AUDIT_LOG_TRANSACTION_ID] 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 ANSI_PADDING OFF
GO

ALTER TABLE [dbo].[AUDIT_LOG_TRANSACTIONS] ADD  DEFAULT (db_name()) FOR [DATABASE]
GO

ALTER TABLE [dbo].[AUDIT_LOG_TRANSACTIONS] ADD  CONSTRAINT [DF_AUDIT_LOG_TRANSACTIONS_MODIFIED_BY]  DEFAULT ('System') FOR [MODIFIED_BY]
GO
4

1 に答える 1

2

文字列に「見にくい」文字が含まれている可能性がありますか? この可能性を排除するには、次のようなクエリを実行します。

select alt.*, LEN(alt.MODIFIED_BY) as 'Length', cast(alt.MODIFIED_BY as varbinary(max)) as 'Bytes' from AUDIT_LOG_TRANSACTIONS alt where alt.MODIFIED_BY like '%System%' 

Length 列と Bytes 列が期待どおりであることを確認します。

于 2013-11-13T00:15:27.163 に答える