2011年6月15日 星期三

[TSQL]無法解析 equal to 作業中 Latin1_General_CI_AI 與 Chinese_Taiwan_Stroke_CI_AS 之間的定序衝突

這是今天發生的小問題,情境是我習慣用自己的小工具做一下 txtBox 或 參數的產生,
所以常使用到這段TSQL 來查詢指定 Table 下,有哪一些欄位跟欄位的資訊
Select * From Information_Schema.Columns Where Table_Name = 'Company'
而這段指令查詢出來的資料如下圖:
image
大部分的資訊都能透過這段指令取得,而在SQL建立的時候,能夠將描述資訊也建立在欄位裡面,
image
但本來這段是查不出「描述欄位」,就突然想到之前 孤影 之前有寫到一篇 取得MS SQL中資料欄位的描述內容 ,
就趕緊東翻西翻,好在有把他收藏起來,一下就找到這篇,而要查出描述欄位則是使用這段指令
select * from fn_listextendedproperty(NULL, 'user', 'dbo', 'table', N'Company', 'column',NULL)

image
查出來的結果就如截圖顯示,我就想說兩個都是 Table 形式 (fn 這一各是傳回Table),
那我就把這兩段指令透過共有的欄位 ColumnName 來 INNER JOIN ,這樣我就能一次的查詢,
就獲得整個欄位的全部資料,所以我就下了這段


Select ISC.* ,F.value
From Information_Schema.Columns AS ISC
INNER JOIN fn_listextendedproperty(NULL, 'user', 'dbo', 'table', N'Company', 'column',NULL)
AS F
ON ISC.COLUMN_NAME = F.objname
Where ISC.Table_Name = 'Company'


結果出現的畫面不是我想像的成功畫面,而是這段的錯誤訊息
無法解析 equal to 作業中 "Latin1_General_CI_AI" 與 "Chinese_Taiwan_Stroke_CI_AS" 之間的定序衝突。
這讓我想到前段時間 .NET Factory 跟我討論,與其他國家不同系統,部分SQL指令整合的時候,當如果遇到定序問題,
該怎麼處理?兩方如果都無法改定序時或不需要改定序的整合方法,
馬上查SQL線上叢書如何透過修改指令的方式來動態修改目前比對的欄位(INNER JOIN),
使用 COLLATE 子句來將兩邊的定序調整成指定的定序,指令如下:


Select ISC.*   ,F.value
From Information_Schema.Columns AS ISC
INNER JOIN fn_listextendedproperty(NULL, 'user', 'dbo', 'table', N'Company', 'column',NULL)
AS F
ON ISC.COLUMN_NAME = F.objname COLLATE Chinese_Taiwan_Stroke_CI_AS
Where ISC.Table_Name = 'Company'



加上 COLLATE 子句就能看到成功顯示的畫面,就能透過這樣的方式,取得欄位資訊與摘要欄位。

SQL介面組態

SQL2008 介面區組態
◆OpenRowset/OpenDatasource
訊息 15281,層級 16,狀態 1,行 4
SQL Server 已封鎖元件 'Ad Hoc Distributed Queries' 的 STATEMENT 'OpenRowset/OpenDatasource' 之存取,因為此元件已經由此伺服器的安全性組態關閉。系統管理員可以使用 sp_configure 來啟用 'Ad Hoc Distributed Queries' 的使用。如需有關啟用 'Ad Hoc Distributed Queries' 的詳細資訊,請參閱《SQL Server 線上叢書》中的<介面區組態>(Surface Area Configuration)。

◆sys.xp_cmdshell
訊息 15281,層級 16,狀態 1,程序 xp_cmdshell,行 1
SQL Server 已封鎖元件 'xp_cmdshell' 的 程序 'sys.xp_cmdshell' 之存取,因為此元件已經由此伺服器的安全性組態關閉。系統管理員可以使用 sp_configure 來啟用 'xp_cmdshell' 的使用。如需有關啟用 'xp_cmdshell' 的詳細資訊,請參閱《SQL Server 線上叢書》中的<介面區組態>(Surface Area Configuration)。
開啟上列2項功能 (請注意安全性)~~

--------------------------------------------------------------------------------------------------
 若懶得使用 介面去開關....可用下面語法~~ 
 ----------------------------------------------------------
◆開啟xp_cmdshell
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'xp_cmdshell', 1;
RECONFIGURE;
◆關閉xp_cmdshell ( 最後的 1 改成 0 )
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'xp_cmdshell', 0;
RECONFIGURE;
----------------------------------------------------------
◆開啟OpenRowSet
EXEC sp_configure 'show advanced options',1
RECONFIGURE;
EXEC sp_configure 'Ad Hoc Distributed Queries',1
RECONFIGURE;
◆關閉OpenRowSet ( 最後的 1 改成 0 )
EXEC sp_configure 'show advanced options',1
RECONFIGURE;
EXEC sp_configure 'Ad Hoc Distributed Queries',0
RECONFIGURE;

2011年6月14日 星期二

EEP Tips

如果Tree一直出現HyperLink請檢察是否有權限可查看。

2011年6月13日 星期一

E-Service的正式開工

E-Service以後的大事紀都寫在這邊,相關的詳細步驟在另外寫