ado*_*lot 5 sql t-sql sql-server performance sql-server-2005
关于SQL性能.
我有一个标量值函数用于检查base中的某些特定条件,它返回BIT值为True或False.
我现在不知道如何填写@BIT参数
如果我写.
set @bit = convert(bit,1)
Run Code Online (Sandbox Code Playgroud)
要么
set @bit = 1
Run Code Online (Sandbox Code Playgroud)
要么
set @bit='true'
Run Code Online (Sandbox Code Playgroud)
函数无论如何都会工作,但我不知道建议日常使用哪种方法.
另一个问题,我在我的基地有大约400万条记录,每日插入大约是该表中的4K记录.
现在我想在该表上添加带有标量值函数的CONSTRAINT,我已经提到过了
像这样的东西
ALTER TABLE fin_stavke
ADD CONSTRAINT fin_stavke_knjizenje CHECK ( dbo.fn_ado_chk_fin(id)=convert(bit,1))
Run Code Online (Sandbox Code Playgroud)
其中"id"是表fin_stavke的主键,dbo.fn_ado_chk_fin看起来像
create FUNCTION fn_ado_chk_fin
(
@stavka_id int
)
RETURNS bit
AS
BEGIN
declare @bit bit
if exists (select * from fin_stavke where id=@stavka_id and doc_id is null and protocol_id is null)
begin
set @bit=0
end
else
begin
set @bit=1
end
return @bit;
END
GO
Run Code Online (Sandbox Code Playgroud)
这种类型和检查约束的方法会不会影响我的表和SQL的性能?
如果还有更好的方法来增加对此表的控制,请告诉我.
我可能是错的,但从表面上看,你似乎只想检查不是两者都是doc_id和? protocol_idNULL
您可以添加表约束来实现此目的。
ALTER TABLE fin_stavke
ADD CONSTRAINT fin_stavke_knjizenje CHECK ( doc_id IS NOT NULL OR protocol_id IS NOT NULL)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9313 次 |
| 最近记录: |