❶ sql操作界面和我熟悉的不一樣,求解決
版本不同。早期的查詢分析器即為第二張圖,SQL2005後則是SSMS即第一張圖這樣的。
在SSMS里沒有資料庫視圖了,並且資料庫對象列表也與早期的有一些區別。
連接狀態都是通過資料庫服務圖標上的小標記來區分:綠色三角是已連接,紅色方塊是未連接,空白是服務狀態未知。
對資料庫或資料庫中的各種對象的操作都在滑鼠右鍵的彈出菜單中。
但從功能上並沒有差別:
在列表中選擇一個資料庫,然後點擊工具欄中的「新建查詢」即可新建一個針對該資料庫的空白查詢腳本編寫窗口:
❷ SQL參數的使用
錯在,(@a=@b)表示兩個變數是否相等,你輸入的不等當然出來的結果為空。
❸ sql怎麼使用參數化
採用sp_executesql 系統存儲過程,執行sql語句,就能傳入參數,
這就是sql參數化sql腳本參數化
你可以根據上面的例子,將sql腳本中定義參數,然後後面賦值參數變數,
在查詢分析器中執行,你就可以知道sql參數化的具體實現和概念了。
如有疑問,請及時溝通!
請採納!
❹ 怎麼在sql2008中添加帶參數的視圖,把存儲過程改成視圖。比如
視頃御圖不能帶參數的,你可巧乎李以先孝遲創建視圖,在視圖裡面用where
CREATE VIEW 視圖名稱
AS
SELECT
NRequestItemno
,[ItemSource]
,[NRequestFormNo]
,[BarCodeFormNo]
,[TollItemNo]
,[formno]
,[ParItemNo]
,(select cname from testitem where itemno=a.paritemno) as itemnamecw
,(select orderno from testitem where itemno=a.paritemno) as orderno
FROM dbo.NRequestItem
select * from 視圖名稱
where nrequestformno=@nrequestformno
❺ sql server 中 一個要輸入參數和輸出參數的存儲過程。
1、首先我們需要打開SQL Server Managment管理工具,新建一個表。
❻ 怎樣在SQLServer中正確使用參數報表
一、帶報表參數的典型應用。
在一個報表中加入參數,最直接的結果就是可以提高查詢語句的重復利用性。如用戶可以通過更改參數來調整顯示的結果等等。對於這些常規的應用筆者不做過多的闡述。筆者現在要說的是,帶參數報表的一些高級應用。
參數報表比較高級的應用就是實現報表鑽取。鑽取是改變維的層次,變換分析的粒度。它包括向上鑽取和向下鑽取。向上鑽取是在某一維上將低層次的細節數據概括到高層次的匯總數據,或者減少維數;向下鑽取是指自動生成匯總行的分析方法。簡單的說,現在資料庫中有一張銷售訂單表。根據這張表可以生成一張各個月份的銷售統計表。但是,有可能用戶在查看這張報表的時候,對某個月份的統計結果有懷疑,為此需要查看這個月份的銷售明細。此時如果利用帶參數的報表實現鑽取功能的話,那麼就不需要重新查詢或者生成報表。而只需要直接在這張報表上點擊月份,系統就會自動打開另外一張報表。這張報表中的內容就是這月份的銷售明細。從技術的角度講,就是通過參數的傳遞,將這張報表的時間信息作為另一張報表的查詢參數。從而讓系統自動根據這個參數來生成相應的數據,從而簡化用戶的操作。
二、帶參數報表要避免注入式攻擊。
在使用參數報表的時候,特別需要注意一點就是防止注入式攻擊。注入式攻擊各位讀者或許都了解。可是對於為什麼使用參數的報表容易引起注入式攻擊,可能大家並不怎麼了解。這主要是因為參數如果採用的是string數據類型所造成的。即如果參數採用的是string數據類型,那麼就表示用戶可以根據需要輸入任何類型的字元串。此時如果用戶輸入了一些注入式攻擊的代碼當作參數,則就可能會導致注入式攻擊。為此如果生成報表時,採用的參數時String數據類型的,就需要特別的注意。為了防止這個注入式攻擊,筆者建議如果採用的參數一定要是String數據類型的話,那麼最好能夠遵循下面的規則。DB2資料庫與SQLServer資料庫的異同
首先,在客戶端將報表查詢語句傳遞給資料庫之前,即將參數復制給Select語句之前,最好進行驗證。即要驗證輸入的參數值中,是否存在一些特殊的符號。這些符號往往跟輸入攻擊有關。如果存在這些特殊字元的話,則需要向用戶提供警告信息,表明存在注入式攻擊的可能性。並且,系統可以拒絕接受這個參數。這個避免注入式攻擊的方法比較消極。如果這些特殊符號確實是查詢參數中包含的內容,那麼也無法使用。
其次,可以通過值列表的方式來向資料庫傳遞參數。在沒有提供值列表的情況下,如果參數是字元類型的,則系統向用戶顯示的是一個可以使用任何值的文本框。此時資料庫管理員可以使用可用值列表的方式來規范化參數的輸入,限制其輸入一些特殊的字元。也就是說,在定義String類型的參數報表時,讓系統向用戶顯示一個下拉的列表框,然後用戶通過選擇來指定參數。這個操作就跟Excel表格中的下拉列框差不多,用戶只能夠選擇資料庫管理員所提供的值,或者說只能夠選擇某張表中存在的值。由於用戶不能夠自己輸入值,而只能夠選擇,這就可以有效的避免注入式攻擊。不過採用這種方式有一個缺陷,就是如果有效的值太多的話,這個列表就會很長。為此用戶在選擇參數的時候,就會很麻煩。如當有效值有500個的話,那麼就需要在500個值中選擇一個值,顯然這有點困難。即使按照參數的名字順序來排列,選擇也是比較麻煩的。大內存SQLServer資料庫的加速劑
第三,可以利用列表查詢的方式,來避免注入式攻擊。即當用戶輸入一個參數之後,系統會自動從一個列表中查詢是否存在這個值。如果存在的話,則將這個參數賦值給查詢語句中的變數。如果不存在的話則提醒用戶參數可能輸入錯誤。如現在有一張銷售訂單明細報表。用戶可能需要根據訂單號碼來查詢銷售訂單明細。此時這個訂單號碼就是一個字元型的參數。當用戶輸入這個參數的時候,並不是馬上傳遞給資料庫,這么做太危險,容易產生注入式攻擊。而是前台應用程序也從後台資料庫中取得所有的銷售訂單的訂單號碼信息。當用戶輸入參數之後,前台應用程序會把這個用戶輸入的參數跟自己查詢出來的信息先進行對比。如果有匹配的信息,就將這個參數傳遞給後台資料庫。如果沒有的話,就向用戶報告錯誤的信息。有些應用程序在設計的時候,還會更進一步。如客戶端程序會先從資料庫中取得訂單號碼與對應的訂單ID。當用戶輸入參數之後,會進行比對。如果比對成功的話,那麼客戶端應用程序會將這個訂單號碼對應的訂單ID作為參數傳遞給查詢語句。也就是說,從資料庫伺服器角度來講,真正的參數是訂單ID(整數型數據類型)而不是訂單號碼(字元串數據類型)。通過這個數據類型轉換,從而可以從根本上防止注入式的攻擊。
以上三種方式都可以很有效的避免注入式攻擊。資料庫管理員需要根據實際應用來選擇合適的解決方案。如當有效值比較少的時候,如按年份來統計銷售訂單時,則可以使用列表的形式。當有效值比較多,特別是這個有效值會自動增長的時候,則可以使用列表查詢的方式。總之一個基本的原則,對於String參數,一定要進行驗證其合法性。否則的話,很容易造成注入式攻擊。
三、對於日期型的數據給與特殊的照顧。
日期型的數據是資料庫中最容易出現問題的一個數據類型。因為不同語言環境下,如英語與漢語環境下,其採用的日期格式是不同的。如果資料庫中定義了某個日期格式,而輸入的參數如果不符合這個格式的話,則系統就會認為這條記錄不存在,從而在報表中查詢不到相關的數據。為此如果在報表中要使用日期型數據參數的話,將會是一件比較麻煩的事情。所以,在應用程序設計時,資料庫管理員最好提醒前台應用程序的設計者,能夠規范化日期的格式。如可以要求他們,對於日期型的數據作為參數時,用戶不能夠手工輸入日期。因為不同的用戶輸入習慣不同,如有些人會按年月日的格式輸入(有些用戶會把8月份寫成08,而有些直接寫成8),有些人則會按月、日、年的格式進行輸入。由於格式不統一,那麼資料庫就很難按照同一個規則進行轉換。為此,對於日期型的數據作為參數時,最好在前台應用程序中能夠規范化輸入的格式。如以一個統計的格式輸入。要做到這一點的話,就可以通過一個日期型的控制項來完成。即用戶不能夠手工輸入日期型的數據。當遇到某個參數時日期型的數據時,當滑鼠定位到這個文本框,則系統就會彈出一個類似日歷的界面。用戶只有通過選擇日期來輸入日期型的數據,從而規范化用戶的輸入。另外也可以通過掩碼的方式來規范用戶輸入的格式。即預先規定年月日的輸入掩碼。用戶在輸入的時候必須按照這個格式,否則的話,系統不會接受用戶的輸入。這兩種方式都可以實現對日期數據的規范化。
當用戶按照同一個格式輸入日期數據後,以後的工作就容易處理了。在將參數傳遞給資料庫的時候,可以在查詢語句中加入一個日期型數據的強制轉換語句。將輸入的日期型數據按照系統表中定義的日期型數據進行轉換。即如果前台客戶端輸入的日期型數據格式是日、月、年(只要輸入的內容統一即可,沒有具體的要求),然後在查詢語句中就可以通過數據類型轉換工具對數據類型進行轉換。如將日、月、年表示的字元型數據類型表示會年、月、日的日期型數據類型。如此的話,就可以保證用戶輸入的參數是資料庫可以識別的。就可以避免因為日期格式不一致或者數據類型不一致而導致報表不能夠抓取記錄。
❼ sql語句加參數
你需要了解sql語句的拼接和一般字元串的拼接的異同.
例如:在sql腳本語句中,字元串用單引號'',這些在C#語句中拼接"sql語句"字元串時需要注意.
你可以在vs.net中寫一個用字元串拼接的sql語句,最後把它賦值給一個字元串對象.然後用斷點調試區查看生成的sql語句的結果,一般sql語句較長,驗證的方式都是把這段sql語句到sql sever的腳本文件(.sql)中去執行一下,就知道是否正確了.當然也有先在sql server 中調試好拼接字元串後再到程序代碼中去修改的.具體方式不定.
(以上是介紹的拼接sql語句方法,不過這種方式的安全性不高,常見的sql注入式攻擊就是利用的拼接sql語句的缺陷.)
你還可以考慮使用帶參數的存儲過程來實現,這個就需要了解存儲過程的一些知識了,具體的方法我就不介紹了,關於帶參數的存儲過程,網上有很多例子參考.
❽ 求助,FineReport使用SQL數據集參數
大致的步驟就是先取出所有數據,再進行過濾,取數,過濾。
簡單旦判應用:SELECT * FROM 銷量 where 地區 = '${地區}'
帶公式的應用:SELECT * FROM 訂單 where 1=1 ${if(len(area) == 0,"","and 貨主地區 = '" + area + "'")} ${if(len(province) == 0,"","and 貨主省份 = '" + province + "'")}
具體步驟如下:
1、打開報表敬遲畢
2、定義亮芹數據源參數
修改數據集sql語句為:SELECT * FROM 銷量 where 地區 = '${地區}',點擊下方的刷新按鈕顯示出參數,默認值設置為「華北」
3、過濾數據
若參數地區的值為華北,那麼${地區}這個參數宏最終的值就是華北,數據集sql即為:SELECT * FROM 銷量 where 地區 = '華北'
4、製作參數界面
5、保存報表並發布
❾ 如何篩選SQL字元串欄位中部分值
一、先說篩選字元串欄位中部分值的記錄。
例如我有一個KKBH(卡口編號)欄位,這是一個字典欄位(對應另一個實體表(卡口表)的編號欄位)。這個欄位的值保存所屬卡口值域{01,02,03}
本來想到的是通過or來實現,這樣需要動態生成SQL語句。
後來想到一個辦法用charindex搜索字元串的辦法。將所有的要查的卡口編號組成類似'01@02'這樣待查字元串。sql查詢時通過charindex篩選出在待查字元串里有的KKBH的記錄。
經測試使用or與使用charindex,兩者在MSSQL中執行效率差不多。
具體實現:
用戶界面查詢需求:可能搜索N個卡口的記錄(N的值域{1,所有卡口個數})。設計這個UI的形式一共三種:
一、一個多選listbox。用戶界面運行時將卡口字典表載入listbox信息。
二、兩個listbox,左邊為待選,右邊為已選,中間加兩個按鈕添加與刪除。用戶界面運行時將卡都字典表載入左邊的listbox。
三、多個Checkbox。可以在界面設計階段直接做死字典表,即有幾個卡口就話幾個checkbox。或者在程序運行根據字典表繪制動態繪制checkbox。
UI的優缺點這里不討論,我這里選擇第三種方式的動態繪制。
在查詢階段根據所選卡口生成待選字元串入:"01@02」
並將此條件傳回後台查詢服務程序
後台查詢服務里只要待查字元串作為參數傳入查詢的SQL語句中(sql片段): charindex(卡口編號,@待查字元串)。當然也可以手動生成SQL方式傳入"charindex(卡口編號,'"+待查字元串+"')".
二、模糊查詢。
使用like的模糊查詢發生效率是很低。
提高的解決辦法與:
一、用full text index 結合contains函數。全文本索引,帶了空間佔用率很高。
二、通過charindex+substring實現簡易模糊查詢。使用substring分段,charindex實現類似like '%關鍵字%'。
❿ 怎樣手動創建自定義SQL的數據窗口需要帶檢索參數解決方法
我的步驟如下
1,定義一個SQL(q_1),更改這個SQL(右鍵-編輯源)保存,然後初始化的定義都沒有了
2,新建與這個SQL相關的數據窗口就可以了問題:
1,更改的SQL不能帶參數,如SELECT ID from st.STU where ID < :li_id
--保存出錯
--無法建立與之對應的數據窗口
希望大家看看呀
------解決方案-------------------------------------------------------- 1、你所說的SQL(q_1)是指Query吧?如果是的話,你要改為帶參數,可右鍵->編輯,
然後通過菜單「design->retrieval arguments」來定義檢索參數。
2、通過Query建立的數據窗口與這個query文件無關,即使你把它刪掉,數據窗口照樣能使用。
------解決方案-------------------------------------------------------- 看得不是太明白!
創建sql select 的DW,不選擇表!菜單 design ->convert to syntax
你就可以直接 寫SQL
參數是就像ls那樣定義!