我有動態SQL存儲在SQL表中,我必須在特定條件下執行。目前,我們使用遊標來爲我們處理這個問題,但我總是被告知儘可能避免使用遊標,因爲它們不是最有效的方式。所以,我的問題是:如何在沒有它們的情況下執行動態SQL(如果有方法)?整個系統是圍繞這個動態的SQL混亂建立的,所以不會改變它。是否有更好的方法來執行不使用遊標的動態SQL?
爲此,假設表格中有Id AS IDENTITY
和SQL AS VARCHAR
字段,其中SQL字段包含要執行的SQL(顯然)。
編輯: 基本上,我想遍歷表並執行SQL列中的SQL。
因此,在表中的行會基本上是這樣的:
ID SQL
-- ----------------------
1 SELECT * FROM RECORD
2 SELECT * FROM PERSON
3 SELECT * FROM LOCATION
我還沒有編寫任何代碼,因爲我會寫一個光標在表遍歷並執行它。我只是不知道的循環表並執行該字符串不是像其他SQL查詢的任何其他方式:
DECLARE @sql VARCHAR(MAX)
DECLARE _cursor CURSOR
FOR
SELECT [SQL]
FROM #tmp2
OPEN _cursor
FETCH NEXT FROM _cursor INTO @sql
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT (@sql)
END
CLOSE _cursor
DEALLOCATE _cursor
動態SQL和遊標是正交的概念 - 一個對另一個沒有影響。是的,他們可能會聚集在您的代碼庫中,但沒有固有的連接。發佈一些代碼,以便我們可以瞭解鏈接。 – Oded 2012-08-06 18:09:54
看到你的代碼會有幫助。除非實際使用遊標中的動態SQL,否則動態SQL和遊標無關。 – LittleBobbyTables 2012-08-06 18:10:00
我知道他們彼此沒有任何關係,我只是不知道另一種方式來循環表,*不使用它們,並執行動態SQL。 – Yatrix 2012-08-06 18:22:47