我需要有一些關鍵表一種「版本」,並試圖實現它在一個相當簡單的方法:SQL Server觸發器和sqlalchemy干擾問題。幫助需要
CREATE TABLE [dbo].[Address] (
[id] bigint IDENTITY(1, 1) NOT NULL,
[post_code] bigint NULL,
...
)
CREATE TABLE [dbo].[Address_History] (
[id] bigint NOT NULL,
[id_revision] bigint NOT NULL,
[post_code] bigint NULL,
...
CONSTRAINT [PK_Address_History] PRIMARY KEY CLUSTERED ([id], [id_revision]),
CONSTRAINT [FK_Address_History_Address]...
CONSTRAINT [FK_Address_History_Revision]...
)
CREATE TABLE [dbo].[Revision] (
[id] bigint IDENTITY(1, 1) NOT NULL,
[id_revision_operation] bigint NULL,
[id_document_info] bigint NULL,
[description] varchar(255) COLLATE Cyrillic_General_CI_AS NULL,
[date_revision] datetime NULL,
...
)
和一堆關於插入/更新觸發器/刪除每個表,旨在存儲它的變化。
我的應用程序是基於PyQt的+ SQLAlchemy的,當我嘗試插入一個實體,存儲在一個版本表,SQLAlchemy的觸發一個錯誤:
The target table 'Heritage' of the DML statement cannot have
any enabled triggers if the statement contains
an OUTPUT clause without INTO clause.
(334) (SQLExecDirectW); [42000]
[Microsoft][ODBC SQL Server Driver]
[SQL Server]Statement(s) could not be prepared. (8180)")
我該怎麼辦?我必須使用sqlalchemy。 如果可以給我一個建議,我怎麼才能實現沒有觸發器的版本控制,它會很酷。
由於錯誤說,你的SQL語句顯然包含一個`OUTPUT`子句,對吧?你可以把它變成一個`OUTPUT(columns)INTO(表變量)`子句嗎?這應該(希望)解決錯誤提到的問題... – 2011-01-25 10:54:05
sqlalchemy是ORM工具,它使插入sql查詢,更新ot本身刪除實體: – 2011-01-25 13:08:58
不熟悉SQL Alchemy - 有沒有辦法在配置它時「撒謊」它,以便它相信它正在與SQL Server 2000實例交談(而不是更高版本,並且假設您不需要以後的功能) ? SQL Server 2000沒有OUTPUT子句,所以它可能不會生成這樣的SQL。 – 2011-01-26 13:22:11