2013-06-21 36 views
1

我有2個表。在table1我有一些行像這樣的人:替換SQL Server中SELECT語句中的列的單引號

  1. PersonX - ID
  2. PersonX - 名稱
  3. PersonX - 地址
  4. PersonY - ID
  5. PersonY - 年齡

在第二張表中,上面提到的ID, NAME,ADDRESS,AGE將是欄。我們在這裏有personX和PersonY的詳細數據。

現在,主要的問題是在存儲過程中,使用光標,我在變量存儲@Elementtable1'ID', 'Name', ...)。

現在我正在使用作爲下同遊標select語句:

SELECT @Element From Table2 

我需要的用戶的細節,如他的身份證,年齡,地址等輸出,但不是我得到輸出'ID', 'NAME', 'AGE'等... 。

我發現,這是因爲@Elementvarchar,具有字符串值,因此選擇語句如下執行:

SELECT 'ID' from table2. 

但我需要的是像下面

SELECT ID FROM TABLE2 

我用替換功能,它不是爲我工作。案例功能,我無法使用它,因爲我們無法說出table1中某個人的數據。它有所不同。我需要一個可用於所有記錄的動態語句。而不是爲每個記錄執行大小寫。

SELECT REPLACE(@Element,'''','') 
FROM TABLE2 

(仍然得到 'ID' 作爲輸出,而不是在表2換算值)

請幫我在這。希望你能理解我的解釋

+0

如果你想在'SELECT'中**參數化**表或列名,你必須使用**動態SQL ** - 將你的SQL語句創建爲NVARCHAR(x)變量,然後執行你已經建立的SQL語句。沒有其他辦法可以做到這一點。 –

回答

0

您將需要使用動態SQL來實現這一點,例如:

CREATE TABLE Table1 
(
    ID INT 
    ,Name VARCHAR(255) 
    ,ADDRESS VARCHAR(255) 
) 

INSERT Table1 VALUES ('1','Joe Bloggs','Address 1') 
INSERT Table1 VALUES ('2','Jane Doe','Address 2') 

DECLARE @ColName VARCHAR(255) = 'ID' 

DECLARE @SQL VARCHAR(MAX) 

SET @SQL = 'SELECT '[email protected]+','+''''[email protected]+''' FROM TABLE1' 

EXEC (@SQL) 

在返回的第一列,就是要能夠執行SQL然而,在我的查詢的第二列中,此刻就是你正在做的事情。就SQL而言,你的變量只是存儲一個值。它不知道你指的是一個列名,這就是爲什麼它只是返回值。

+0

謝謝,可能是我可以使用這個。但我想知道除了使用動態SQL之外,還有其他選擇。因爲prevously我們修改並替換了所有的動態SQL。 – Pathrudu

+0

在上面的解釋中。解決方案是使用動態SQL。但是,如果您可以更全面地瞭解您所做的工作和光標示例,則可以找到其他解決方案。 – JBond