2011-06-02 96 views
17

有誰知道如何在DB2中運行以下SQL Server代碼?在DB2中聲明變量SQL

我正在轉換SQL Server腳本,以便它們將在DB2系統上運行,並且在使用DB2中的變量時遇到了一些問題。

T-SQL代碼

這顯然是不實際的代碼,但效果很好的一個例子。

DECLARE @INPUT_VALUE INT 
SET INPUT_VALUE = 4756 

SELECT * 
FROM TABLE1 
WHERE TABLE1.COLUMN1 = @INPUT_VALUE 

回答

18

我想這個forum posting,我引用下面,應該回答這個問題。


裏面一個過程,函數或觸發器定義,或在動態SQL語句(嵌入主機程序):

BEGIN ATOMIC 
DECLARE example VARCHAR(15) ; 
SET example = 'welcome' ; 
SELECT * 
FROM tablename 
WHERE column1 = example ; 
END 

或(在任何環境下):

WITH t(example) AS (VALUES('welcome')) 
SELECT * 
FROM tablename, t 
WHERE column1 = example 

或者(雖然這可能不是你想要的,因爲變量只需要創建一次,但以後每個人都可以使用它,儘管其內容在每個用戶的基礎上都是私有的):

CREATE VARIABLE example VARCHAR(15) ; 
SET example = 'welcome' ; 
SELECT * 
FROM tablename 
WHERE column1 = example ; 

+0

邁克爾,在第一個例子中認爲代碼的一部分被忽略了。看來你正在設置一個尚未聲明或創建的變量?我使用有效的表和列名運行此代碼,並返回錯誤。 – 2011-06-03 02:27:02

+0

我認爲你是對的......我無法讓它工作,所以我編輯了問題以刪除它。 – 2011-06-03 18:10:10

+0

如果我需要運行帶有一些輸入變量的通用腳本,我喜歡上一個。我是否正確地說變量存在於交易的生命中? – ESP 2015-05-27 11:36:39

7

我從SQL Server的背景也來了,在過去的2周搞清楚如何在IBM Data Studio中運行這樣的腳本。希望能幫助到你。

CREATE VARIABLE v_lookupid INTEGER DEFAULT (4815162342); --where 4815162342 is your variable data 
    SELECT * FROM DB1.PERSON WHERE PERSON_ID = v_lookupid; 
    SELECT * FROM DB1.PERSON_DATA WHERE PERSON_ID = v_lookupid; 
    SELECT * FROM DB1.PERSON_HIST WHERE PERSON_ID = v_lookupid; 
DROP VARIABLE v_lookupid;