sqlserver怎么写参数
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(整数型数据类型)而不是。
存储过程怎么写的
1. 存储过程怎么写
比如
if exists (select name from sysobjects where name = 'proc_ManagerLogin')
begin
drop procedure proc_ManagerLogin
end
go
create procedure proc_ManagerLogin
@return bit output ,@username varchar(59),@password varchar(32)
as
begin
if exists(select * from systemManager where adminName=@username and adminpass=@password)
begin
set @return=1
--在系统日志中记录
exec proc_SystemLog_add '管理员登陆','进入了后台'
end
else
begin
set @return=0
end
end
go
2. 存储过程怎么写
CREATE PROCEDURE [拥有者.]存储过程名[;程序编号]
[(参数#1,…参数#1024)]
[WITH
{RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION}
]
[FOR REPLICATION]
Create procedure procedue_name
[@parameter data_type][output]
[with]{recompile|encryption}
as
sql_statement
例子:create proc query_book
as
select * from book
go
exec query_book
3. 存储过程怎么写啊
select 存储过程
CREATE PROCEDURE Sp_dream_Select (@ID Bigint ) AS
SELECT name,password
FROM dream WHERE ID = @ID
GO
insert存储过程
CREATE PROCEDURE Sp_dream_Edit
(
@ID bigint output , --成功后返回单据ID
@name varchar (14),
@password varchar(60),
)
AS
BEGIN
INSERT INTO dream(id,name,password )
VALUES (@id,@name,@password );
END
RETURN
GO
update存储过程
CREATE PROCEDURE Sp_dream_Edit
(
@ID bigint output , --成功后返回单据ID
@name varchar(14),
@password varbinary(256)
)
AS
BEGIN
UPDATE dream
SET
name = @name,
password = @password ,
WHERE id = @id;
END
RETURN
GO
4. 这个句子的存储过程怎么写
存储过程的语法如下:
create proc 过程名
begin
过程主体
end
GO
过程主体可以是你写的查询语句或将查询结果写入某个表,语法与一般SQL同,至于你想加入变量,可以用类似下面的语句定义与赋值:
declare @startdate datetime,
@enddate datetime
select @enddate='2008-1-1',@startdate='2007-1-1'
这样就可以用你写的语句调用了,不过不需要分号与加号
5. 怎么写存储过程
一、整体格式。存储过程的格式如下:
CREATE PROCEDURE [creator.]"proc_name" ( /* parameters,。 */ )
/* RESULT ( column-name,。 ) */
BEGIN
;
END
其中creator是用户名,比如dba;proc_name是你自己起的过程名;后面的参数可有可无,视自己情况定,如果有格式如(a integer,b char(50));再下面的RESULT应该是返回值,这个没用过不知道怎么回事!
二、内容。把这些都写好了可能是这样:
CREATE PROCEDURE dba.myProcedure ( @a integer,@b char(50))
BEGIN
;
END
但是这样子还是不能编译的,因为整个过程体是空的,而我学习的结果是过程中至少要有一个SQL语句。所以要这样写才不会出错:
CREATE PROCEDURE dba.myProcedure ( a integer,b char(50))
BEGIN
SELECT * FROM MyTable
END
三、语法。
1、分号。在写的过程中最郁闷的问题是分号!最后发现好像是这样:
每一句都要加分号,不管是SQl语句还是其它的什么语句,但是最后保存后最后一句的分号会被自动删除!(我用的是Sybase的Sybase Central)。
2、定义变量。
格式为Declare @varName integer;(注意有分号!)“@”号好像可有可无!
3、SELECT语句。
格式为:
SELECT Count(*) INTO @varName FROM MyTable WHERE id = @a;
4、if语句。
格式为:
if(varName > 0) then
return
end if;(注意还有分号!)
5、循环语句。
格式为:
loop
……
end loop;(注意分号!)
6、设置变量值。
格式为:
set @varName = 10;
set @varName = @varName2;
7、字符串。
Declare myString char(50);
set @myString = 'Hello!';
要用单引号!
8、定义游标。
格式为:
declare MyCursor dynamic scroll cursor for
select …… from …… where ……;
9、打开、使用和关闭游标。
Open MyCursor;
fetch next MyCursor into ……;
Close MyCursor;
10、调用方法。
string ls_name="test"
DECLARE ProcName1 PROCEDURE FOR ProcName2
@wg_wellid=2,@wg_wgid=1,@wg_stringsid=1,@bha_wellid=2,@bha_name=:ls_name;
execute ProcName1 ;
close ProcName1 ;
其中ProcName1 是调用程序中自定义的过程名,ProcName2是数据库中存储过程的名字,下面的传入的参数。
6. 求个存储过程的写法
student表的具体表结构没说清楚,没法写啊。
数据库也不清楚用的什么,不同数据库可能语句不一样。
不用存储过程,2条语句就可以了。
以SQL SERVER 2005 为例,给你个参考,假设你student表中记录日期信息的字段名为DateColumn,
如下:
insert into student2
select * from student where getdate() > dateadd(day,31,DateColumn)
delete from student where getdate() > dateadd(day,31,DateColumn)
7. SQL Server的存储过程怎么写
SQL server中如何存储:首先准备数据,测试存储过程 use ssqadm; 创建测试books表 create table books_test ( book_id int identity(1,1) primary key, book_name varchar(20),book_price float,book_auth varchar(10)); 插入测试数据 insert into books_test (book_name,book_price,book_auth)values ('论语',25.6,'孔子'),('天龙八部',25.6,'金庸'),('雪山飞狐',32.7,'金庸'),('平凡的世界',35.8,'路遥'),('史记',54.8,'司马迁'); select * from books_test;*/ 创建无参存储过程 if (exists (select * from sys.objects where name = 'getAllBooks')) drop proc getAllBooks go create procedure getAllBooks as begin select * from books_test; 调用,执行存储过程 exec getAllBooks; end go 修改存储过程 alter procedure getallbooks as select book_name from books_test; 修改存储过程的名称 sp_rename getallbooks,proc_get_allbooks; go exec proc_get_allbooks; go 创建带参数的存储过程 use ssqadm go if (exists (select * from sys.objects where name = 'searchbooks')) drop proc searchbooks exec searchbooks 执行存储searchbooks得到如下结果:go create procedure searchbooks (@bookid int)--括号里面是 as begin declare @book_id int;定义一个标量变量,只是保证存储过程的完整性,在本存储是多此一举的。
set @book_id = @bookid; select* from books_test where book_id = @book_id; end; go-- exec searchbooks 执行存储searchbooks得到如下结果:创建带两个参数的存储过程 use ssqadm go if (exists (select * from sys.objects where name = 'book_test2')) drop proc book_test2 exec book_test2 执行存储book_test2得到如下结果:go create procedure book_test2 (@bookid int,@bookname varchar(20))括号里面是 as begin declare @book_id int; 定义一个标量变量,只是保证存储过程的完整性,在本存储是多此一举的。declare @book_name varchar(20); set @book_id = @bookid; set @book_name = @bookname; select* from books_test where book_id = @book_id and book_name = @book_name; end; go exec book_test2 扩展资料:SQL Server中查询存储命令子句:USE [SSQADM] Use 是跳转到哪个数据库,对这个数据库进行操作。
GO GO向 SQL Server 实用工具发出一批 Transact-SQL 语句结束的信号,相当于提交上面的SQL语句。GO是把t-sql语句分批次执行 (一步成功了才会执行下一步,即一步一个GO)/****** Object: StoredProcedure [dbo].[PROC_four_five_hr] Script Date: 07/30/2018 13:44:55 ******/ SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ON。
8. 数据库的存储过程怎么写
1,调用没有参数的存储过程<% set conn=server.CreateObject("adodb.connection") set cmd=server.CreateObject("adodb.command") strconn="dsn=pubs;uid=sa;pwd" conn.Open strconn set cmd.ActiveConnection=conn cmd.CommandText="{call nono}"'set rs=cmc.exe 或者cmd.execute set rs=cmd.Execute()%>2,一个输入的参数的存储过程<% set conn=server.CreateObject("adodb.connection") set cmd=server.CreateObject("adodb.command") strconn="dsn=pubs;uid=sa;pwd" conn.Open strconn set cmd.ActiveConnection=conn cmd.CommandText="{call oneinput(?)}" cmd.Parameters.Append cmd.CreateParameter("@aaa",adInteger ,adParamInput ) cmd("@aaa")=100 cmd.Execute()%>3,一个输入参数和一个输出的参数<% set conn=server.CreateObject("adodb.connection") set cmd=server.CreateObject("adodb.command") strconn="dsn=pubs;uid=sa;pwd" conn.Open strconn set cmd.ActiveConnection=conn cmd.CommandText = "{call oneinout(?,?)}" cmd.Parameters.Append cmd.CreateParameter("@aaa",adInteger,adParamInput) cmd("@aaa")=10 cmd.Parameters.Append cmd.CreateParameter("@bbb",adInteger,adParamOutput) cmd.Execute() bbb=cmd("@bbb")%>4,一个输入参数,一个输出参数,和一个返回值e79fa5e98193e59b9ee7ad9431333332643864<% set conn=server.CreateObject("adodb.connection") set cmd=server.CreateObject("adodb.command") strconn="dsn=pubs;uid=sa;pwd" conn.Open strconn set cmd.ActiveConnection=conn cmd.CommandText="{?=call onereturn(?,?)}" cmd.Parameters.Append cmd.CreateParameter("@return_value",adInteger,adParamReturnValue ) cmd.Parameters.Append cmd.CreateParameter("@aaa",adInteger,adParamInput ) cmd("@aaa")=10 cmd.Parameters.Append cmd.CreateParameter("@bbb",adInteger,adParamOutput) cmd.Execute() bbb=cmd("@bbb") rrr=cmd("@return_value")%>。
9. 如何写存储过程
CREATE PROCEDURE au_info_all
-- 创建存储过程
AS
-- 指定过程要执行的操作。
SELECT au_lname, au_fname, title, pub_name
FROM authors a INNER JOIN titleauthor ta
ON a.au_id = ta.au_id INNER JOIN titles t
ON t.title_id = ta.title_id INNER JOIN publishers p
ON t.pub_id = p.pub_id
GO
-- 操作过程
转载请注明出处育才学习网 » sqlserver数据库存储过程怎么写
育才学习网