我正在執行使用SET FMTONLY ON的存儲過程,以便模擬我們的代碼生成器的功能。但是,似乎執行結果被緩存,因爲我仍然得到一個轉換失敗錯誤從我剛剛刪除的過程!即使在沒有SET FMTONLY ON的情況下執行proc也會發生這種情況。SET FMTONLY ON的問題
任何人都可以告訴我這是怎麼回事?
我正在執行使用SET FMTONLY ON的存儲過程,以便模擬我們的代碼生成器的功能。但是,似乎執行結果被緩存,因爲我仍然得到一個轉換失敗錯誤從我剛剛刪除的過程!即使在沒有SET FMTONLY ON的情況下執行proc也會發生這種情況。SET FMTONLY ON的問題
任何人都可以告訴我這是怎麼回事?
有些語句仍然會執行,即使SET FMTONLY ON
。您「轉換失敗」錯誤可能來自存儲過程中的set variable
語句等簡單操作。例如,這返回的第一個查詢中的元數據,而是拋出一個異常,當它運行的最後一條語句:
SET FMTONLY on
select 1 as a
declare @a int
set @a = 'a'
至於運行過程下降,這是一個新的給我。 SQL Server使用系統表來確定要執行的對象,因此,是否爲該對象緩存執行計劃並不重要。如果刪除它,它將從系統表中刪除,並且永遠不可執行。您可以在執行該過程之前查詢sysobjects(或sys.objects)嗎?我希望你會發現你沒有放棄它。
這聽起來像是客戶端錯誤。在通過SQL Management Studio運行時是否收到相同的消息?
您是否確認沒有另一個具有相同名稱的程序擁有其他架構/用戶?
解析DDL語句,但如果在連接上執行了SET FMTONLY ON,則會在運行時被忽略。因此,如果在FMTONLY爲ON時放下proc,table等,語句將被解析,但操作不會被執行。
嘗試此驗證
SET FMTONLY OFF
--create表上
CREATE TABLE TestTable (Column1 INT, Column2 INT)
--insert 1結果
INSERT INTO TestTable (Column1, Column2)
VALUES (1,2)
測試--validate記錄插入
SELECT * FROM TestTable
--now設置格式只能爲ON
SET FMTONLY ON
返回
--columns,但沒有數據
SELECT * FROM TestTable
與FMTONLY --perform DDL語句
DROP TABLE TestTable
- - 再次將FMTONLY關閉
SET FMTONLY OFF
--The表上面下降,所以這不應該工作
SELECT * FROM TestTable
DROP TABLE TestTable
SELECT * FROM TestTable
咄!我將FMTONLY設置爲ON,並且我在DDL中所做的任何操作似乎都沒有影響。 – ProfK 2008-09-16 13:24:10