テーブルのDDLを変更できませんが、2つのtext
フィールドで結合する必要があります。エラーが出ます
メッセージ402、レベル16、状態1、行23
データタイプのテキストとテキストは、等号演算子で互換性がありません。
以下は私の問題を説明するサンプルDDLですが、どうすれば克服できますか?
Declare @Table1 Table(id text,name nvarchar(200))
Insert Into @Table1 (id, name) Values
('123', 'Joe'), ('222.00', 'Jim')
Declare @Table2 Table (id text,green nvarchar(200))
Insert Into @Table2 (id, green) Values
('123', 'JDSKLJS'), ('222.00', 'KLJKLJJKL')
Select
*
FROM @Table1 t1
INNER JOIN @Table2 t2
ON t1.id = t2.id
text
フィールドをvarchar(max)
としてキャストできます
Declare @Table1 Table(id text,name nvarchar(200)) Insert Into @Table1 (id, name) Values ('123', 'Joe'), ('222.00', 'Jim') Declare @Table2 Table (id text,green nvarchar(200)) Insert Into @Table2 (id, green) Values ('123', 'JDSKLJS'), ('222.00', 'KLJKLJJKL'); Select * FROM @Table1 t1 INNER JOIN @Table2 t2 ON cast(t1.id as varchar(max)) = cast(t2.id as varchar(max)) GO
id |名前| id |緑 :-- :--- | :----- | :-------- 123 |ジョー| 123 | JDSKLJS 222.00 |ジム| 222.00 | KLJKLJJKL
dbfiddle ---(ここ
(結合で)より小さなデータ型に変換する必要があります:
Select *
FROM @Table1 t1
INNER JOIN @Table2 t2
ON CONVERT(varchar(8000),t1.id) = CONVERT(varchar(8000),t2.id)
または、あなたが知っているいくつかの小さな数字がマッチをユニークにするでしょう。
SELECT *
FROM @Table1 t1
INNER JOIN @Table2 t2
ON CAST(t1.id AS varchar(max)) = CAST(t2.id AS varchar(max))
パフォーマンスはかなりひどいことに注意してください。したがって、どのような種類の製品コードでもこれを行うことはありません。スキーマをリファクタリングして、実行しようとしていることをより適切にサポートします。