2013-10-23 186 views
-2

我想用下面的代碼獲取從表companies結果來提取表數據。如何設置可變@strs的價值指向我的表companies的列name如何使用SQL Server Management Studio中

declare @strs nvarchar(max) 
set @strs = 'I want to pass table data here' // I want to pass table data here 
set @strs = reverse(@strs) 
select reverse(@strs) String, 
reverse(right(@strs,len(@strs) - charindex(' ',@strs,30))) Description1, 
ltrim(reverse(left(@strs,charindex(' ',@strs,30)))) Description2 
+0

你會詳細說明什麼叫表中的數據是什麼意思? – Miller

+0

通過表數據我的意思是一個表中的字段的值。 – user2906622

回答

0

認爲這是你的意思......

select @strs = name from companies where ... 
0

除非我完全脫落...你正在尋找一個變量輸入到「動態」選擇列的基礎。如果這是真的,那麼您正在尋找動態SQL。這可能是一個安全漏洞,所以最好是讀一下動態SQL需要的內容。比較簡單的,你正在建設一個變量的SQL語句,然後執行變量(這是危險的,因爲我可以建立一個變量作爲SQL代碼並執行對您的服務器的SQL注入攻擊)。

set @sql = 'select ' + @strs + 'from table' 
exec @sql 

只要@strs是用逗號分隔它們的列的列表,這應該工作。

我要問爲什麼這樣做在這個級別這個雖然...列選擇往往是最好的,你是呈現結果給您的用戶在......你可能希望做GUI重新考慮爲什麼你決定這是涅ary。

+0

其實我必須將table1中的數據複製到table2。表1的字段「公司名稱」是nvarchar(120)。但是table2有3個字段,每個字段是nvarchar(40)「companyname1」,「companyname2」,「companyname3」。我需要以3個部分將字符串拆分,但以邏輯的方式,在第40個位置的空間的基礎上進行拆分。 例如,如果一個字符串是「Alufinish GESELLSCHAFT獻給VERFAHRENSTECHNIKü。楚MetalloberflächenbehandlungmbH的&C」 應該在第40的位置 「Alufinish GESELLSCHAFT獻給」「VERFAHRENSTECHNIKü。楚」「MetalloberflächenbehandlungmbH的分裂這樣的空間的基礎上, &C」 – user2906622

+0

你的問題,使相當多的感覺現在...你應該使用此信息編輯你的問題,這真的很難從你的問題告訴,這是你的要求。對於一個決議......空間總是在第40和第80個字符,還是你需要檢測空間?你可以使用子字符串和左/右邏輯將它們分成40個字符(left(field,40))會給出前40個字符。難的部分是要檢測這個空間 – Twelfth

相關問題