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是被調用時」即時「執行的