iT邦幫忙

0

關於SQL語法......

1 declare @SQL nvarchar(max)
2 set @SQL = 'select zlt_productdetail_0.createdbyname as ''createdbyname'',
3 .
4 .
5 .
6 .
7 LE_B097C76F.zlt_custname as ''zlt_custname''

8 from (' + @CRM_FilteredZlt_productdetail_ + ') as zlt_productdetail_0 left
9 outer join
10 FilteredZLT_productid as LE_B097C76F on
11 (zlt_productdetail_0.zlt_productdetail = LE_B097C76F.zlt_productidid)'

12 exec(@SQL)

想問有人看得懂這SQL語法嗎?問題如下

1、這段法語是T-SQL型語法嗎??
2、第一行是否在在宣告nvarchar變數為最大值?? 這declare是指?? 這@SQL是指??
3、第二行是否是要將SQL語法丟入第一行的宣告變數中??
4、第七行是否能改成LE_B097C76F.zlt_custname as ''ABC''(as後面可改成想要的名稱)??
5、第八行(' + @CRM_FilteredZlt_productdetail_ + ')是啥???一般不是會放資料表?
6、如有4張資料表要做關連是否可用left outer join關連起來? 或是其他方法?
7、第十二行是否是指結束??

= =有人能解答嗎?跟我以前學的SQL語法不太一樣

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

6
player
iT邦大師 1 級 ‧ 2010-10-20 17:12:53
最佳解答

1、這段法語是T-SQL型語法嗎??
是的, 而且看起來, 這應該是包在SQL-Server的預存程序裡的code吧?

2、第一行是否在在宣告nvarchar變數為最大值?? 這declare是指?? 這@SQL是指??
這是定義一個名為 @SQL 的變數, 格式為 nvarchar , 可用長度為 max (max要看SQL Server的文件寫多少? 不過應該不會小於4000吧?)

3、第二行是否是要將SQL語法丟入第一行的宣告變數中??

4、第七行是否能改成LE_B097C76F.zlt_custname as ''ABC''(as後面可改成想要的名稱)??
這是select要輸出的欄位重新命名, 你要怎麼改都可以吧? 除非沖到sql的保留字, 不然前後的 '' 都可以拿掉

5、第八行(' + @CRM_FilteredZlt_productdetail_ + ')是啥???一般不是會放資料表?
這種用法是你多個table有一樣的欄位, 為了方便動態跨table抓資料, 所以才把table名稱由變數傳入

6、如有4張資料表要做關連是否可用left outer join關連起來? 或是其他方法?
join的相關語法, 你select時要怎麼串,通常都可以(例外是有用到子查詢時,有時候會被當成不合SQL語法, 不過你寫的沒有用到巢式select, 應該還不用擔心)

7、第十二行是否是指結束??
不是, 那是執行你放在@SQL變數中的 select 命令, 少了這行的話, 前面就沒意義了

ghost234 iT邦新手 4 級 ‧ 2010-10-21 08:14:12 檢舉

關於第5點,有點一知半解的,可以舉個例子嗎?

4
chk
iT邦新手 3 級 ‧ 2010-10-21 15:19:00

就是說因為table name是變動的,因此用變數來代替
假設今天用的是mytable001 ,可是另一個程式是要用 mytable002
就可以定義 set @CRM_FilteredZlt_productdetail='mytable002'
這樣一來取得的table就會不同
from (' + @CRM_FilteredZlt_productdetail_ + ')
另外他的 from ()<---用括號包起來,也有可能放的是一句SQL 查詢,而利用子查詢來當成一個table

ghost234 iT邦新手 4 級 ‧ 2010-10-21 15:30:57 檢舉

感謝大大的講解~感恩

我要發表回答

立即登入回答