1.sqlserver 表值参数怎么写
如下:
[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
)
2.Sqlserver2005数据库如何写带参数的存储过程
带参数的存储过程
USE AdventureWorks;
GO
IF OBJECT_ID ( 'HumanResources.uspGetEmployees', 'P' ) IS NOT NULL
DROP PROCEDURE HumanResources.uspGetEmployees;
GO
CREATE PROCEDURE HumanResources.uspGetEmployees
@LastName nvarchar(50),
@FirstName nvarchar(50)
AS
SELECT FirstName, LastName, JobTitle, Department
FROM HumanResources.vEmployeeDepartment
WHERE FirstName = @FirstName AND LastName = @LastName;
GO
3.SQL 参数的使用
错在,(@a=@b)表示两个变量是否相等,你输入的不等当然出来的结果为空。
SQL Server2000中可以执行,越高级的版本,越能用,你在 SQL Server2008必须定义这2个变量。
declare @a varchar(100),@b varchar(200)
select @a='你的属性名',@b='属性值'--- 替换你自己的内容,肯定行
declare @sql varchar(1000)
select @sql='SELECT 专业名, 院名FROM major WHERE ('+@a+' ='''+ @b+''')'
exec(@SQL)
我说你肯定通过按钮调用,文本框或者下拉框进行进行输入项的设置是吧?
这时候,你单击事件中,先将该语句写好就行了,例如:你在下拉框中选择 院名名进行搜索,
文本框中输入 :计算机
按钮事件中,你定义一个字符串:string s;
为s赋值 s="SELECT 专业名, 院名FROM major WHERE ('"&;+下拉框的VALUE值+&" ='' ' "&;文本框的值& '' ') ";
这样你明白吗?
4.sql语句加参数
string sql="insert into 表名 values ("参数1","参数2","参数3")";
sqlParamters[] param=new sqlParamters[]{
new sqlParamters("参数1",名称.Text.Tostring()),
new sqlParamters("参数1",名称.Text.Tostring()),
new sqlParamters("参数1",名称.Text.Tostring())
}
类名.ExecuteCommand(sql,param);
5.SQL 存储过程中参数怎么使用
参数定义单个参数1> CREATE PROCEDURE HelloWorld12> @UserName VARCHAR(10)3> AS4> BEGIN5> PRINT 'Hello' + @UserName + '!';6> END;7> go1> DECLARE @RC int;2> EXECUTE @RC = HelloWorld1 'Edward' ;3> PRINT @RC;4> goHelloEdward!0IN、OUT、IN OUT注:SQL Server 的 OUTPUT 需要写在变量数据类型后面。
SQL Server 没有 IN OUT 关键字OUTPUT 已经相当于 IN OUT 了。1> CREATE PROCEDURE HelloWorld22> @UserName VARCHAR(10),3> @OutVal VARCHAR(10) OUTPUT,4> @InoutVal VARCHAR(10) OUTPUT5> AS6> BEGIN7> PRINT 'Hello ' + @UserName + @InoutVal + '!';8> SET @OutVal = 'A';9> SET @InoutVal = 'B';10> END;11> go1>2> DECLARE @RC int, @OutVal VARCHAR(10), @InoutVal VARCHAR(10);3> BEGIN4> SET @InoutVal = '~Hi~';5> EXECUTE @RC = HelloWorld2 'Edward', @OutVal OUTPUT, @InoutVal OUTPUT;6> PRINT @RC;7> PRINT '@OutVal=' + @OutVal;8> PRINT '@InoutVal=' + @InoutVal;9> END10> goHello Edward~Hi~!0@OutVal=A@InoutVal=B参数的默认值1> CREATE PROCEDURE HelloWorld32> @UserName VARCHAR(10),3> @Val1 VARCHAR(20) = ' Good Moning,',4> @Val2 VARCHAR(20) = ' Nice to Meet you'5> AS6> BEGIN7> PRINT 'Hello ' + @UserName + @Val1 + @Val2 + '!';8> END;9> go1>2> DECLARE @RC int;3> BEGIN4> 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> END11> goHello Edward Good Moning, Nice to Meet you!0Hello Edward Good Night, Nice to Meet you!0Hello Edward Good Night, Bye!0指定参数名称调用此部分使用 “参数默认值”那一小节的存储过程。
用于说明当最后2个参数是有默认的时候,如何跳过中间那个。1> DECLARE @RC int;2> BEGIN3> 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> END12> goHello Edward Good Moning, Nice to Meet you!0Hello Edward Good Night, Nice to Meet you!0Hello Edward Good Night, Bye!0Hello Edward Good Moning, HeiHei !0。
6.怎样在SQLServer中正确使用参数报表
对于任何数据库来说,报表应用是其不可缺少的一部分。
在SQLServer数据库中,提供了一个帮助管理员设计、创建、管理报表的工具,即报表服务器。通过这个报表服务器可以让报表的创建更加的简单,安全更加有保证。
不过这个报表工具能否发挥其应有的作用,最好还是要看报表工具的使用者,是否掌握了相关的使用技巧。 笔者这次要跟各位读者讨论的就是,在SQLServer数据库如何正确使用带参数的报表。
一、带报表参数的典型应用。 在一个报表中加入参数,最直接的结果就是可以提高查询语句的重复利用性。
如用户可以通过更改参数来调整显示的结果等等。对于这些常规的应用笔者不做过多的阐述。
笔者现在要说的是,带参数报表的一些高级应用。 参数报表比较高级的应用就是实现报表钻取。
钻取是改变维的层次,变换分析的粒度。它包括向上钻取和向下钻取。
向上钻取是在某一维上将低层次的细节数据概括到高层次的汇总数据,或者减少维数;向下钻取是指自动生成汇总行的分析方法。 简单的说,现在数据库中有一张销售订单表。
根据这张表可以生成一张各个月份的销售统计表。但是,有可能用户在查看这张报表的时候,对某个月份的统计结果有怀疑,为此需要查看这个月份的销售明细。
此时如果利用带参数的报表实现钻取功能的话,那么就不需要重新查询或者生成报表。 而只需要直接在这张报表上点击月份,系统就会自动打开另外一张报表。
这张报表中的内容就是这月份的销售明细。从技术的角度讲,就是通过参数的传递,将这张报表的时间信息作为另一张报表的查询参数。
从而让系统自动根据这个参数来生成相应的数据,从而简化用户的操作。 二、带参数报表要避免注入式攻击。
在使用参数报表的时候,特别需要注意一点就是防止注入式攻击。注入式攻击各位读者或许都了解。
可是对于为什么使用参数的报表容易引起注入式攻击,可能大家并不怎么了解。这主要是因为参数如果采用的是string数据类型所造成的。
即如果参数采用的是string数据类型,那么就表示用户可以根据需要输入任何类型的字符串。此时如果用户输入了一些注入式攻击的代码当作参数,则就可能会导致注入式攻击。
为此如果生成报表时,采用的参数时String数据类型的,就需要特别的注意。为了防止这个注入式攻击,笔者建议如果采用的参数一定要是String数据类型的话,那么最好能够遵循下面的规则。
DB2数据库与SQLServer数据库的异同。 首先,在客户端将报表查询语句传递给数据库之前,即将参数复制给Select语句之前,最好进行验证。
即要验证输入的参数值中,是否存在一些特殊的符号。这些符号往往跟输入攻击有关。
如果存在这些特殊字符的话,则需要向用户提供警告信息,表明存在注入式攻击的可能性。 并且,系统可以拒绝接受这个参数。
这个避免注入式攻击的方法比较消极。如果这些特殊符号确实是查询参数中包含的内容,那么也无法使用。
其次,可以通过值列表的方式来向数据库传递参数。在没有提供值列表的情况下,如果参数是字符类型的,则系统向用户显示的是一个可以使用任何值的文本框。
此时数据库管理员可以使用可用值列表的方式来规范化参数的输入,限制其输入一些特殊的字符。也就是说,在定义 String类型的参数报表时,让系统向用户显示一个下拉的列表框,然后用户通过选择来指定参数。
这个操作就跟Excel表格中的下拉列框差不多,用户只能够选择数据库管理员所提供的值,或者说只能够选择某张表中存在的值。 由于用户不能够自己输入值,而只能够选择,这就可以有效的避免注入式攻击。
不过采用这种方式有一个缺陷,就是如果有效的值太多的话,这个列表就会很长。为此用户在选择参数的时候,就会很麻烦。
如当有效值有500个的话,那么就需要在 500个值中选择一个值,显然这有点困难。 即使按照参数的名字顺序来排列,选择也是比较麻烦的。
大内存SQLServer数据库的加速剂 第三,可以利用列表查询的方式,来避免注入式攻击。即当用户输入一个参数之后,系统会自动从一个列表中查询是否存在这个值。
如果存在的话,则将这个参数赋值给查询语句中的变量。 如果不存在的话则提醒用户参数可能输入错误。
如现在有一张销售订单明细报表。用户可能需要根据订单号码来查询销售订单明细。
此时这个订单号码就是一个字符型的参数。当用户输入这个参数的时候,并不是马上传递给数据库,这么做太危险,容易产生注入式攻击。
而是前台应用程序也从后台数据库中取得所有的销售订单的订单号码信息。 当用户输入参数之后,前台应用程序会把这个用户输入的参数跟自己查询出来的信息先进行对比。
如果有匹配的信息,就将这个参数传递给后台数据库。如果没有的话,就向用户报告错误的信息。
有些应用程序在设计的时候,还会更进一步。如客户端程序会先从数据库中取得订单号码与对应的订单ID。
当用户输入参数之后,会进行比对。如果比对成功的话,那么客户端应用程序会将这个订单号码对应的订单ID作为参数传递给查询语句。
也就是说,从数据库服务器角度来讲,真正的参数是订单ID(整数型数据类型)而不是。
转载请注明出处育才学习网 » sqlserver怎么写参数