Có ai biết một cách giải quyết cho điều này? Về cơ bản, thủ tục được lưu trữ buộc một toán tử chèn chống lại khung nhìn được lập chỉ mục, mặc dù các hàng không đủ điều kiện. Kết quả là có một lỗi cast. Tuy nhiên, đối với hocs quảng cáo, sql loại bỏ chính xác chế độ xem khỏi xem xét.
Hãy xem xét lược đồ sau:
create table testdata (
testid int identity(1,1) primary key
, kind varchar(50)
, data nvarchar(4000))
go
create view integer_testdata with schemabinding
as
select cast(a.data as int) data, a.kind, a.testid
from dbo.testdata a
where a.kind = 'integer'
go
create unique clustered index cl_intdata on integer_testdata(data)
go
create procedure insert_testdata
(
@kind varchar(50)
, @data nvarchar(4000)
)
as
begin
insert into testdata (kind, data) values (@kind, @data)
end
go
Tất cả đều hoạt động:
insert into testdata (kind, data) values ('integer', '1234');
insert into testdata (kind, data) values ('integer', 12345);
insert into testdata (kind, data) values ('noninteger', 'noninteger');
exec insert_testdata @kind = 'integer', @data = '123456';
exec insert_testdata @kind = 'integer', @data = 1234567;
Điều này không thành công:
exec insert_testdata @kind = 'noninteger', @data = 'noninteger';
So sánh "kế hoạch thực hiện ước tính":
insert into testdata (kind, data) values ('noninteger', 'noninteger'):

exec insert_testdata @kind = 'noninteger', @data = 'noninteger':

option (recompile)trợ giúp?