2012-05-03 32 views
0
DECLARE @myvariable VARCHAR(100) 
SET @myvariable = 'mytext' 

SELECT Name FROM Customers AS @myvariable 

怎麼會這樣做呢?從客戶名稱中選擇@myvariable //動態AS中的sql

答到加雷思: 這將讓我做這樣的事情時要保留列的原始名稱:眼下

declare @myvariable varchar(20) 
set @myvariable='Name' 

select case @myvariable when 'Name' then Name 
         when 'Id' then Id 
     end 
      as Name 

from Customers 

,當@myvariable的值發生變化時,科拉姆名不會,但我需要它與@myvariable相同。

+0

我不明白你爲什麼想這樣做?我無法想象動態別名會有用的任何場景。你能否詳細說明你試圖達到什麼目標,或許可以提出一個替代方案。 – GarethD

+0

編輯帖子回答 – user1151923

+0

我仍然不確定爲什麼你需要列名是動態的,除非你的列名直接通過你的用戶界面,這不是一個好主意。但是,我明白你正在嘗試做什麼,動態SQL是你最好的方法,正如@ KDiTraglia的回答所闡明的那樣。 – GarethD

回答

2

像這樣的東西可以工作

DECLARE @myvariable VARCHAR(100) 
SET @myvariable = 'mytext' 

DECLARE @sql NVARCHAR(200) 

SET @sql = 'SELECT Name AS ' + QUOTENAME(@MyVariable) + ' FROM Customers' 

EXEC sp_executesql @sql 
+0

由於@MyVariable可能包含空格/保留字符,或者是導致執行失敗的SQL關鍵字,所以在構建SQL語句時使用'QUOTENAME(@MyVariable)'可能是明智的。 – GarethD

0

我想我明白你想問什麼,你需要使用的是PL/SQL,我對你的問題的理解是你想有一個程序,你想輸入一個變量名稱來輸出結果。

SET SERVEROUTPUT ON; 

CREATE OR REPLACE PROCEDURE FindCustomer(customerName IN STRING) AS 
BEGIN 
    SELECT NAME INTO CUSTNAME FROM CUSTOMER WHERE NAME = customerName; 
    DBMS_OUTPUT.PUT_LINE(CUSTNAME);   
END FindCustomer; 
/
PROMPT 'Input Customer\'s name'; 
ACCEPT temp; 
EXECUTE FindCustomer(&temp); 

我不能完全肯定,如果這是正確的看到,因爲我沒有測試過,但是,這是一個PL/SQL函數,將理論上回到你的名客戶,你輸入到腳本通過鍵盤或任何輸入。如果你想了解更多關於PL/SQL,我建議你去here

+0

Ahhh顯然我誤解了這個問題,但我只是想在這裏留下,因爲我努力工作,這可能會引起你的興趣。 –

+0

儘管OP不使用Oracle,但這不是有效的PL/SQL。 'string'應該是'varchar2',你需要聲明變量'custname','custname customer.name%type'。 – Ben

+0

謝謝你,這只是我彈了起來,在我頭上。所以我知道有錯誤,但它給我的意思一個總體印象。 –