Kennt jemand eine Problemumgehung dafür? Im Wesentlichen erzwingt die gespeicherte Prozedur einen Einfügeoperator gegen die indizierte Ansicht, obwohl die Zeilen nicht qualifiziert sind. Infolgedessen liegt ein Umwandlungsfehler vor. Bei Ad-hocs entfernt SQL die Ansicht jedoch korrekt aus der Betrachtung.
Betrachten Sie das folgende Schema:
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
Diese alle funktionieren:
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;
Dies schlägt fehl:
exec insert_testdata @kind = 'noninteger', @data = 'noninteger';
Ein Vergleich der "geschätzten Ausführungspläne":
insert into testdata (kind, data) values ('noninteger', 'noninteger')::

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

option (recompile)?