真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

sqlserver表參數(shù),數(shù)據(jù)庫(kù)參數(shù)表

怎樣在SQLServer中正確使用參數(shù)報(bào)表

 一、帶報(bào)表參數(shù)的典型應(yīng)用。

目前累計(jì)服務(wù)客戶1000+,積累了豐富的產(chǎn)品開發(fā)及服務(wù)經(jīng)驗(yàn)。以網(wǎng)站設(shè)計(jì)水平和技術(shù)實(shí)力,樹立企業(yè)形象,為客戶提供成都做網(wǎng)站、網(wǎng)站建設(shè)、外貿(mào)營(yíng)銷網(wǎng)站建設(shè)、網(wǎng)站策劃、網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)絡(luò)營(yíng)銷、VI設(shè)計(jì)、網(wǎng)站改版、漏洞修補(bǔ)等服務(wù)。成都創(chuàng)新互聯(lián)公司始終以務(wù)實(shí)、誠(chéng)信為根本,不斷創(chuàng)新和提高建站品質(zhì),通過(guò)對(duì)領(lǐng)先技術(shù)的掌握、對(duì)創(chuàng)意設(shè)計(jì)的研究、對(duì)客戶形象的視覺(jué)傳遞、對(duì)應(yīng)用系統(tǒng)的結(jié)合,為客戶提供更好的一站式互聯(lián)網(wǎng)解決方案,攜手廣大客戶,共同發(fā)展進(jìn)步。

在一個(gè)報(bào)表中加入?yún)?shù),最直接的結(jié)果就是可以提高查詢語(yǔ)句的重復(fù)利用性。如用戶可以通過(guò)更改參數(shù)來(lái)調(diào)整顯示的結(jié)果等等。對(duì)于這些常規(guī)的應(yīng)用筆者不做過(guò)多的闡述。筆者現(xiàn)在要說(shuō)的是,帶參數(shù)報(bào)表的一些高級(jí)應(yīng)用。

參數(shù)報(bào)表比較高級(jí)的應(yīng)用就是實(shí)現(xiàn)報(bào)表鉆取。鉆取是改變維的層次,變換分析的粒度。它包括向上鉆取和向下鉆取。向上鉆取是在某一維上將低層次的細(xì)節(jié)數(shù)據(jù)概括到高層次的匯總數(shù)據(jù),或者減少維數(shù);向下鉆取是指自動(dòng)生成匯總行的分析方法。簡(jiǎn)單的說(shuō),現(xiàn)在數(shù)據(jù)庫(kù)中有一張銷售訂單表。根據(jù)這張表可以生成一張各個(gè)月份的銷售統(tǒng)計(jì)表。但是,有可能用戶在查看這張報(bào)表的時(shí)候,對(duì)某個(gè)月份的統(tǒng)計(jì)結(jié)果有懷疑,為此需要查看這個(gè)月份的銷售明細(xì)。此時(shí)如果利用帶參數(shù)的報(bào)表實(shí)現(xiàn)鉆取功能的話,那么就不需要重新查詢或者生成報(bào)表。而只需要直接在這張報(bào)表上點(diǎn)擊月份,系統(tǒng)就會(huì)自動(dòng)打開另外一張報(bào)表。這張報(bào)表中的內(nèi)容就是這月份的銷售明細(xì)。從技術(shù)的角度講,就是通過(guò)參數(shù)的傳遞,將這張報(bào)表的時(shí)間信息作為另一張報(bào)表的查詢參數(shù)。從而讓系統(tǒng)自動(dòng)根據(jù)這個(gè)參數(shù)來(lái)生成相應(yīng)的數(shù)據(jù),從而簡(jiǎn)化用戶的操作。

二、帶參數(shù)報(bào)表要避免注入式攻擊。

在使用參數(shù)報(bào)表的時(shí)候,特別需要注意一點(diǎn)就是防止注入式攻擊。注入式攻擊各位讀者或許都了解。可是對(duì)于為什么使用參數(shù)的報(bào)表容易引起注入式攻擊,可能大家并不怎么了解。這主要是因?yàn)閰?shù)如果采用的是string數(shù)據(jù)類型所造成的。即如果參數(shù)采用的是string數(shù)據(jù)類型,那么就表示用戶可以根據(jù)需要輸入任何類型的字符串。此時(shí)如果用戶輸入了一些注入式攻擊的代碼當(dāng)作參數(shù),則就可能會(huì)導(dǎo)致注入式攻擊。為此如果生成報(bào)表時(shí),采用的參數(shù)時(shí)String數(shù)據(jù)類型的,就需要特別的注意。為了防止這個(gè)注入式攻擊,筆者建議如果采用的參數(shù)一定要是String數(shù)據(jù)類型的話,那么最好能夠遵循下面的規(guī)則。DB2數(shù)據(jù)庫(kù)與SQLServer數(shù)據(jù)庫(kù)的異同

首先,在客戶端將報(bào)表查詢語(yǔ)句傳遞給數(shù)據(jù)庫(kù)之前,即將參數(shù)復(fù)制給Select語(yǔ)句之前,最好進(jìn)行驗(yàn)證。即要驗(yàn)證輸入的參數(shù)值中,是否存在一些特殊的符號(hào)。這些符號(hào)往往跟輸入攻擊有關(guān)。如果存在這些特殊字符的話,則需要向用戶提供警告信息,表明存在注入式攻擊的可能性。并且,系統(tǒng)可以拒絕接受這個(gè)參數(shù)。這個(gè)避免注入式攻擊的方法比較消極。如果這些特殊符號(hào)確實(shí)是查詢參數(shù)中包含的內(nèi)容,那么也無(wú)法使用。

其次,可以通過(guò)值列表的方式來(lái)向數(shù)據(jù)庫(kù)傳遞參數(shù)。在沒(méi)有提供值列表的情況下,如果參數(shù)是字符類型的,則系統(tǒng)向用戶顯示的是一個(gè)可以使用任何值的文本框。此時(shí)數(shù)據(jù)庫(kù)管理員可以使用可用值列表的方式來(lái)規(guī)范化參數(shù)的輸入,限制其輸入一些特殊的字符。也就是說(shuō),在定義String類型的參數(shù)報(bào)表時(shí),讓系統(tǒng)向用戶顯示一個(gè)下拉的列表框,然后用戶通過(guò)選擇來(lái)指定參數(shù)。這個(gè)操作就跟Excel表格中的下拉列框差不多,用戶只能夠選擇數(shù)據(jù)庫(kù)管理員所提供的值,或者說(shuō)只能夠選擇某張表中存在的值。由于用戶不能夠自己輸入值,而只能夠選擇,這就可以有效的避免注入式攻擊。不過(guò)采用這種方式有一個(gè)缺陷,就是如果有效的值太多的話,這個(gè)列表就會(huì)很長(zhǎng)。為此用戶在選擇參數(shù)的時(shí)候,就會(huì)很麻煩。如當(dāng)有效值有500個(gè)的話,那么就需要在500個(gè)值中選擇一個(gè)值,顯然這有點(diǎn)困難。即使按照參數(shù)的名字順序來(lái)排列,選擇也是比較麻煩的。大內(nèi)存SQLServer數(shù)據(jù)庫(kù)的加速劑

第三,可以利用列表查詢的方式,來(lái)避免注入式攻擊。即當(dāng)用戶輸入一個(gè)參數(shù)之后,系統(tǒng)會(huì)自動(dòng)從一個(gè)列表中查詢是否存在這個(gè)值。如果存在的話,則將這個(gè)參數(shù)賦值給查詢語(yǔ)句中的變量。如果不存在的話則提醒用戶參數(shù)可能輸入錯(cuò)誤。如現(xiàn)在有一張銷售訂單明細(xì)報(bào)表。用戶可能需要根據(jù)訂單號(hào)碼來(lái)查詢銷售訂單明細(xì)。此時(shí)這個(gè)訂單號(hào)碼就是一個(gè)字符型的參數(shù)。當(dāng)用戶輸入這個(gè)參數(shù)的時(shí)候,并不是馬上傳遞給數(shù)據(jù)庫(kù),這么做太危險(xiǎn),容易產(chǎn)生注入式攻擊。而是前臺(tái)應(yīng)用程序也從后臺(tái)數(shù)據(jù)庫(kù)中取得所有的銷售訂單的訂單號(hào)碼信息。當(dāng)用戶輸入?yún)?shù)之后,前臺(tái)應(yīng)用程序會(huì)把這個(gè)用戶輸入的參數(shù)跟自己查詢出來(lái)的信息先進(jìn)行對(duì)比。如果有匹配的信息,就將這個(gè)參數(shù)傳遞給后臺(tái)數(shù)據(jù)庫(kù)。如果沒(méi)有的話,就向用戶報(bào)告錯(cuò)誤的信息。有些應(yīng)用程序在設(shè)計(jì)的時(shí)候,還會(huì)更進(jìn)一步。如客戶端程序會(huì)先從數(shù)據(jù)庫(kù)中取得訂單號(hào)碼與對(duì)應(yīng)的訂單ID。當(dāng)用戶輸入?yún)?shù)之后,會(huì)進(jìn)行比對(duì)。如果比對(duì)成功的話,那么客戶端應(yīng)用程序會(huì)將這個(gè)訂單號(hào)碼對(duì)應(yīng)的訂單ID作為參數(shù)傳遞給查詢語(yǔ)句。也就是說(shuō),從數(shù)據(jù)庫(kù)服務(wù)器角度來(lái)講,真正的參數(shù)是訂單ID(整數(shù)型數(shù)據(jù)類型)而不是訂單號(hào)碼(字符串?dāng)?shù)據(jù)類型)。通過(guò)這個(gè)數(shù)據(jù)類型轉(zhuǎn)換,從而可以從根本上防止注入式的攻擊。

以上三種方式都可以很有效的避免注入式攻擊。數(shù)據(jù)庫(kù)管理員需要根據(jù)實(shí)際應(yīng)用來(lái)選擇合適的解決方案。如當(dāng)有效值比較少的時(shí)候,如按年份來(lái)統(tǒng)計(jì)銷售訂單時(shí),則可以使用列表的形式。當(dāng)有效值比較多,特別是這個(gè)有效值會(huì)自動(dòng)增長(zhǎng)的時(shí)候,則可以使用列表查詢的方式??傊粋€(gè)基本的原則,對(duì)于String參數(shù),一定要進(jìn)行驗(yàn)證其合法性。否則的話,很容易造成注入式攻擊。

 三、對(duì)于日期型的數(shù)據(jù)給與特殊的照顧。

日期型的數(shù)據(jù)是數(shù)據(jù)庫(kù)中最容易出現(xiàn)問(wèn)題的一個(gè)數(shù)據(jù)類型。因?yàn)椴煌Z(yǔ)言環(huán)境下,如英語(yǔ)與漢語(yǔ)環(huán)境下,其采用的日期格式是不同的。如果數(shù)據(jù)庫(kù)中定義了某個(gè)日期格式,而輸入的參數(shù)如果不符合這個(gè)格式的話,則系統(tǒng)就會(huì)認(rèn)為這條記錄不存在,從而在報(bào)表中查詢不到相關(guān)的數(shù)據(jù)。為此如果在報(bào)表中要使用日期型數(shù)據(jù)參數(shù)的話,將會(huì)是一件比較麻煩的事情。所以,在應(yīng)用程序設(shè)計(jì)時(shí),數(shù)據(jù)庫(kù)管理員最好提醒前臺(tái)應(yīng)用程序的設(shè)計(jì)者,能夠規(guī)范化日期的格式。如可以要求他們,對(duì)于日期型的數(shù)據(jù)作為參數(shù)時(shí),用戶不能夠手工輸入日期。因?yàn)椴煌挠脩糨斎肓?xí)慣不同,如有些人會(huì)按年月日的格式輸入(有些用戶會(huì)把8月份寫成08,而有些直接寫成8),有些人則會(huì)按月、日、年的格式進(jìn)行輸入。由于格式不統(tǒng)一,那么數(shù)據(jù)庫(kù)就很難按照同一個(gè)規(guī)則進(jìn)行轉(zhuǎn)換。為此,對(duì)于日期型的數(shù)據(jù)作為參數(shù)時(shí),最好在前臺(tái)應(yīng)用程序中能夠規(guī)范化輸入的格式。如以一個(gè)統(tǒng)計(jì)的格式輸入。要做到這一點(diǎn)的話,就可以通過(guò)一個(gè)日期型的控件來(lái)完成。即用戶不能夠手工輸入日期型的數(shù)據(jù)。當(dāng)遇到某個(gè)參數(shù)時(shí)日期型的數(shù)據(jù)時(shí),當(dāng)鼠標(biāo)定位到這個(gè)文本框,則系統(tǒng)就會(huì)彈出一個(gè)類似日歷的界面。用戶只有通過(guò)選擇日期來(lái)輸入日期型的數(shù)據(jù),從而規(guī)范化用戶的輸入。另外也可以通過(guò)掩碼的方式來(lái)規(guī)范用戶輸入的格式。即預(yù)先規(guī)定年月日的輸入掩碼。用戶在輸入的時(shí)候必須按照這個(gè)格式,否則的話,系統(tǒng)不會(huì)接受用戶的輸入。這兩種方式都可以實(shí)現(xiàn)對(duì)日期數(shù)據(jù)的規(guī)范化。

當(dāng)用戶按照同一個(gè)格式輸入日期數(shù)據(jù)后,以后的工作就容易處理了。在將參數(shù)傳遞給數(shù)據(jù)庫(kù)的時(shí)候,可以在查詢語(yǔ)句中加入一個(gè)日期型數(shù)據(jù)的強(qiáng)制轉(zhuǎn)換語(yǔ)句。將輸入的日期型數(shù)據(jù)按照系統(tǒng)表中定義的日期型數(shù)據(jù)進(jìn)行轉(zhuǎn)換。即如果前臺(tái)客戶端輸入的日期型數(shù)據(jù)格式是日、月、年(只要輸入的內(nèi)容統(tǒng)一即可,沒(méi)有具體的要求),然后在查詢語(yǔ)句中就可以通過(guò)數(shù)據(jù)類型轉(zhuǎn)換工具對(duì)數(shù)據(jù)類型進(jìn)行轉(zhuǎn)換。如將日、月、年表示的字符型數(shù)據(jù)類型表示會(huì)年、月、日的日期型數(shù)據(jù)類型。如此的話,就可以保證用戶輸入的參數(shù)是數(shù)據(jù)庫(kù)可以識(shí)別的。就可以避免因?yàn)槿掌诟袷讲灰恢禄蛘邤?shù)據(jù)類型不一致而導(dǎo)致報(bào)表不能夠抓取記錄。

SqlServer 創(chuàng)建表命令中的參數(shù)——TEXTIMAGE_ON

在使用SqlServer創(chuàng)建表時(shí)會(huì)遇到一些參數(shù),比如PAD_INDEX=OFF,TEXTIMAGE_ON等等,這里把這些參數(shù)的含義做一個(gè)小結(jié),在使用時(shí)避免出錯(cuò)。下面是創(chuàng)建表的腳本:

首先說(shuō)一下TEXTIMAGE_ON [PRIMARY],這個(gè)表中有一個(gè)大數(shù)據(jù)字段[Json] nvarchar ,TEXTIMAGE_ON 的作用是將列存儲(chǔ)在指定文件組中,如果沒(méi)有指定 TEXTIMAGE_ON,則大數(shù)據(jù)列將與表存儲(chǔ)在同一文件組中。如果表中沒(méi)有大數(shù)據(jù)字段,使用這個(gè)參數(shù)會(huì)報(bào)錯(cuò):

如何獲取SQLSERVER所有表的外鍵關(guān)系參數(shù)

---利用Sql查詢指定表的所有外鍵約束及外鍵表名與列名

select a.name as 約束名,object_name(b.parent_object_id) as 外鍵表,d.name as 外鍵列,object_name(b.referenced_object_id) as 主健表,c.name as 主鍵列 from sys.foreign_keys A inner join sys.foreign_key_columns B on A.object_id=b.constraint_object_id inner join sys.columns C on B.parent_object_id=C.object_id and B.parent_column_id=C.column_id inner join sys.columns D on B.referenced_object_id=d.object_id and B.referenced_column_id=D.column_id where object_name(B.referenced_object_id)='指定表名'

SQLServer跨數(shù)據(jù)庫(kù)執(zhí)行存儲(chǔ),并且這個(gè)存儲(chǔ)帶有表類型參數(shù),需要怎么聲明傳入?

參數(shù)定義

單個(gè)參數(shù)

1 CREATE PROCEDURE HelloWorld1

2 @UserName VARCHAR(10)

3 AS

4 BEGIN

5 PRINT 'Hello' + @UserName + '!';

6 END;

7 go

1 DECLARE @RC int;

2 EXECUTE @RC = HelloWorld1 'Edward' ;

3 PRINT @RC;

4 go

HelloEdward!

IN、OUT、IN OUT

注:

SQL Server 的 OUTPUT 需要寫在變量數(shù)據(jù)類型后面。

SQL Server 沒(méi)有 IN OUT 關(guān)鍵字

OUTPUT 已經(jīng)相當(dāng)于 IN OUT 了。

1 CREATE PROCEDURE HelloWorld2

2 @UserName VARCHAR(10),

3 @OutVal VARCHAR(10) OUTPUT,

4 @InoutVal VARCHAR(10) OUTPUT

5 AS

6 BEGIN

7 PRINT 'Hello ' + @UserName + @InoutVal + '!';

8 SET @OutVal = 'A';

9 SET @InoutVal = 'B';

10 END;

11 go

1

2 DECLARE @RC int, @OutVal VARCHAR(10), @InoutVal VARCHAR(10);

3 BEGIN

4 SET @InoutVal = '~Hi~';

5 EXECUTE @RC = HelloWorld2 'Edward', @OutVal OUTPUT, @InoutVal OUTPUT;

6 PRINT @RC;

7 PRINT '@OutVal=' + @OutVal;

8 PRINT '@InoutVal=' + @InoutVal;

9 END

10 go

Hello Edward~Hi~!

@OutVal=A

@InoutVal=B

參數(shù)的默認(rèn)值

1 CREATE PROCEDURE HelloWorld3

2 @UserName VARCHAR(10),

3 @Val1 VARCHAR(20) = ' Good Moning,',

4 @Val2 VARCHAR(20) = ' Nice to Meet you'

5 AS

6 BEGIN

7 PRINT 'Hello ' + @UserName + @Val1 + @Val2 + '!';

8 END;

9 go

1

2 DECLARE @RC int;

3 BEGIN

4 EXECUTE @RC = HelloWorld3 'Edward';

5 PRINT @RC;

6 EXECUTE @RC = HelloWorld3 'Edward', ' Good Night,';

7 PRINT @RC;

8 EXECUTE @RC = HelloWorld3 'Edward', ' Good Night,', ' Bye';

9 PRINT @RC;

10 END

11 go

Hello Edward Good Moning, Nice to Meet you!

Hello Edward Good Night, Nice to Meet you!

Hello Edward Good Night, Bye!

指定參數(shù)名稱調(diào)用

此部分使用 “參數(shù)默認(rèn)值”那一小節(jié)的存儲(chǔ)過(guò)程。

用于說(shuō)明當(dāng)最后2個(gè)參數(shù)是有默認(rèn)的時(shí)候,如何跳過(guò)中間那個(gè)。

1 DECLARE @RC int;

2 BEGIN

3 EXECUTE @RC = HelloWorld3 'Edward';

4 PRINT @RC;

5 EXECUTE @RC = HelloWorld3 'Edward', @Val1=' Good Night,';

6 PRINT @RC;

7 EXECUTE @RC = HelloWorld3 'Edward', @Val1=' Good Night,', @Val2=' Bye';

8 PRINT @RC;

9 EXECUTE @RC = HelloWorld3 'Edward', @Val2=' HeiHei ';

10 PRINT @RC;

11 END

12 go

Hello Edward Good Moning, Nice to Meet you!

Hello Edward Good Night, Nice to Meet you!

Hello Edward Good Night, Bye!

Hello Edward Good Moning, HeiHei !

sqlserver 表值參數(shù)怎么寫

如下:

[sql] view plain copy print?

USE testDb2

GO

IF NOT OBJECT_ID('tb_Demo_MultiRowsInsert') IS NULL

DROP TABLE [tb_Demo_MultiRowsInsert]

/****** Object: Table [dbo].[tb_Demo_MultiRowsInsert] Script Date: 2012/4/6 12:19:21 ******/

CREATE TABLE [dbo].[tb_Demo_MultiRowsInsert](

[TeamID] int not null primary key identity(101,1),

[PName] [Nvarchar](20) NOT NULL,

[GName] [Nvarchar](20) NOT NULL

)


分享題目:sqlserver表參數(shù),數(shù)據(jù)庫(kù)參數(shù)表
網(wǎng)站路徑:http://weahome.cn/article/dsgsdjj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部