C不要做成字段就可以.
select A,B ,A+B as C from tableName--(tableName是表名)
⑵ SQL:关于一个简单的定时同步,这样一个存储过程大概应该怎么写。
定时的你制定定时任务就可以了。
说一下更新,假设第一列为主键
insert into B1 select * from A1 where A1.a1 not in(select b1 from B1)
⑶ SQL实现存储过程
存储过程的概念
SQL Server提供了一种方法,它可以将一些固定的操作集中起来由SQL Server数据库服务器来完成,以实现某个任务,这种方法就是存储过程。
存储过程是SQL语句和可选控制流语句的预编译集合,存储在数据库中,可由应用程序通过一个调用执行,而且允许用户声明变量、有条件执行以及其他强大的编程功能。
在SQL Server中存储过程分为两类:即系统提供的存储过程和用户自定义的存储过程。
可以出于任何使用SQL语句的目的来使用存储过程,它具有以下优点:
可以在单个存储过程中执行一系列SQL语句。
可以从自己的存储过程内引用其他存储过程,这可以简化一系列复杂语句。
存储过程在创建时即在服务器上进行编译,所以执行起来比单个SQL语句快,而且减少网络通信的负担。
安全性更高。
创建存储过程
在SQL Server中,可以使用三种方法创建存储过程 :
①使用创建存储过程向导创建存储过程。
②利用SQL Server 企业管理器创建存储过程。
③使用Transact-SQL语句中的CREATE PROCEDURE命令创建存储过程。
⑷ SQL 存储过程
仔细思考一下我的解决办法是否妥当:
因为过程开头部分已经定义了4个变量,并且都赋初值为'0',
那么,我们做两处变动:
1、在你的select语句执行前,我们写上4个判断,判断这4个变量是否被传入了值,未传入时怎么样处理。
2、修改select语句的where子句(语句中有三个“=”改成like)。
过多的描述也许难以看懂,我直接写出来,新增或修改的部分,我在后面用了注释“//--★”(我的写法是基于Sybase的,你可以看懂的。当然你也可以先看一下后面的【总结】):
if exists(………………………………)
drop ……………………
go
create Proc Proc_ManualSign
@BranchId varchar(10) = '0',
……………………
……………………
@UserName varchar(50) = '0'
as
begin //--★sybase写法,用于过程开始,参考你的数据库,看是否需要加
if @BranchId = '0' //--★如果@BranchId依然为初始值(未传入参数)
select @BranchId = '%' //--★那么将@BranchId赋值为'%'
if @DepartId = '0' //--★如果@DepartId依然为初始值(未传入参数)
select @DepartId = '%' //--★那么将@DepartId赋值为'%'
if @UserId = '0' //--★如果@UserId依然为初始值(未传入参数)
select @UserId = '%' //--★那么将@UserId赋值为'%'
if @UserName = '0' //--★如果@UserName依然为初始值(未传入参数)
select @UserName = '%' //--★那么将@UserName赋值为'%'
select …………
……………………
and b.BranchId like @BranchId --机构 //--★你原来的“=”改成了“like”
and d.DepartId like @DepartId --部门 //--★你原来的“=”改成了“like”
and m.UserId like @UserId --用户Id //--★你原来的“=”改成了“like”
and u.UserName like '%'+@UserName+'%' --用户名
end //--★sybase写法,用于标注过程结束,参考你的数据库,看是否需要加
go
======================================================================
【★★--总结--★★】我的办法:
4个变量初值为'0',excute执行该过程时,if语句就要依次判断各变量的当前值,判断的结果无非两种:①.未传入值(还是'0'),②.传入了值(不是'0')
①.未传入值
if语句判断出某变量未传入值,则将该变量置为'%',那么select语句的where条件中就是该字段 like '%',也就是该字段的检索条件为任意的。
②.传入了值
传入了值,则if语句的判断结果为假(False),那么直接跳出判断去执行select语句,虽然where子句的条件中用的是 like 介词,但没有通配符'%'的话,like 的作用也就是'=',即:【like '销售部'】的作用也就是 【='销售部'】,所以也满足了输入参数的精确查询要求。
执行时:
假如什么参数也不传入,即:查询全部的信息
excute Proc_ManualSign '0', '0', '0', '0'
假如仅部门和用户ID传入参数,则
excute Proc_ManualSign '0', '开发部', '319', '0'
⑸ SQL存储过程!!!
你可以用output类型的参数。这里的输出是一个字符串,用“,”分割,你试试
IF EXISTS ( SELECT *
FROM dbo.sysobjects
WHERE type = 'P'
AND name = 'P_XXX' )
BEGIN
DROP PROCEDURE [dbo].[P_XXX]
END
GO
CREATE PROCEDURE [dbo].[P_XXX]
(
@date DATETIME ,
@Name VARCHAR(MAX) OUTPUT
)
AS
BEGIN
IF EXISTS ( SELECT *
FROM Daily
WHERE Date = @date )
BEGIN
SELECT SUBSTRING(A.Name, 0, LEN(A.Name))
FROM ( SELECT Name + ','
FROM @Record
FOR
XML PATH('')
) A ( Name )
END
ELSE
BEGIN
SELECT @Name = ''
END
END
GO
C#代码
SqlCommand CMD = new SqlCommand(“P_XXX”,DBCN);
CMD.CommandType = CommandType.StoredProcere;
CMD.Parameters.Add("@Name",SqlDbType.varchar,2000);
CMD.Parameters["@Name"].Direction = ParameterDirection.Output;
⑹ SQL存储过程
是因为你上面有错造成的断点调试一下看看具体什么错误
⑺ sql 存储过程
uuteamqz表,guestname(客人),askdate(时间)
你 要输出的结果给个示例呗,需求不明确呀
⑻ sql存储过程
CREATE PROCEDURE call_phone
(
@callerNum bigint
)
as
declare @returns tinyint
begin
if exists(select * from info where usePhone=@phone1)
set @returns= 1
else
set @returns= 0
select @returns
end
哈哈,我又把你的答案放这来了
⑼ sql server2005l数据库中用存储过程如何做到表与表之间字段的同步更新
我在一楼的基础上做点补充,思路属于一楼。
CREATE TRIGGER A_Update ON A
FOR UPDATE
AS
IF UPDATE(E)
BEGIN
UPDATE B SET F=I.E
FROM B,Deleted D,Inserted I
WHERE B.E=D.E
END
⑽ sql server 存储过程是同步调用还是队列
这问题好怪。
1、你究竟是指sp还是job?
2、sp是被调用时”即时“执行的