0

次の問題があります: 1 つの列にテキストと数値を含む SQL テーブルがあります。テキストと数字を処理するために 2 つのビューを作成しました。

ビュー全体を選択すると期待どおりに動作しますが、select ステートメントに where ステートメントを追加すると、次のエラーが発生します。

Conversion failed when converting the varchar value 'Thomas' to data type int.

外側のselectのステートメントの前に、内側のビューのwhereステートメントを適用するようにサーバーに伝えることはできますか?

エラーを再現するには、次の SQL コードを使用してください。

create schema tst
go
create table tst.tbl(strValue varchar(10))
insert tst.tbl(strValue)
    values ('Thomas'), ('1991'), ('Reto'), ('21'), ('Strub')
go
create view tst.tblStr as
    select strValue
    from tst.tbl
    where isnumeric(strValue)=0
go
create view tst.tblInt as
    select cast(strValue as int) intValue
    from tst.tbl
    where isnumeric(strValue)=1

go

select * from tst.tblStr order by strValue --ok
select * from tst.tblInt order by intValue --ok

go

select * from tst.tblInt where intValue<100 --not ok

go

select * from tst.tbl where isnumeric(strValue)=1 and cast(strValue as int) < 100 --ok

go

drop view tst.tblInt
drop view tst.tblStr
drop table tst.tbl
drop schema tst
4

2 に答える 2

0

ビュー tst.tblInt には「case when」を使用します。

 create view tst.tblInt as
    select 
            case when isnumeric(strValue)=1 
                then cast(strValue as int)
                else 0 
            end  intValue

    from tst.tbl
    where isnumeric(strValue)=1 
于 2012-12-05T12:07:20.997 に答える
0

私はあなたがすでに投稿した答えを信じています.1行だけ変更して確認してください

CREATE SCHEMA TST
GO
CREATE TABLE TST.TBL(STRVALUE VARCHAR(10))
INSERT TST.TBL(STRVALUE)
VALUES ('THOMAS'), ('1991'), ('RETO'), ('21'),('24'),('212'), ('STRUB')
GO
CREATE VIEW TST.TBLSTR AS
SELECT STRVALUE
FROM TST.TBL
WHERE ISNUMERIC(STRVALUE)=0
GO
CREATE VIEW TST.TBLINT AS
SELECT CAST(STRVALUE AS INT) INTVALUE
FROM TST.TBL
WHERE ISNUMERIC(STRVALUE)=1

GO

SELECT * FROM TST.TBLSTR ORDER BY STRVALUE --OK
SELECT * FROM TST.TBLINT ORDER BY INTVALUE --OK

GO

**SELECT * FROM TST.TBLINT WHERE ISNUMERIC(INTVALUE)<100 --NOW OK ;)**

GO

SELECT * FROM TST.TBL WHERE ISNUMERIC(STRVALUE)=1 AND CAST(STRVALUE AS INT) < 100 --OK

GO

DROP VIEW TST.TBLINT
DROP VIEW TST.TBLSTR
DROP TABLE TST.TBL
DROP SCHEMA TST
于 2012-12-05T12:10:04.303 に答える