还是SQL的问题,我想做一个表值函数
主要涉及两个表--部门表和员工表,根据员工表中员工的部门号来更新部门表中的每个部门的人数。表值函数应该怎么写啊?谢谢谢谢...
主要涉及两个表--部门表和员工表,根据员工表中员工的部门号来更新部门表中的每个部门的人数。表值函数应该怎么写啊?谢谢谢谢
展开
2个回答
展开全部
你提到“表值函数”,让我不明白你的需求到底是什么。
如果你想让员工表一有修改,部门表中的人数字段立即更改,那就用trigger,trigger里的代码就用楼上的:
update 部门表 部门人数字段 = (select count(*) from 员工表 where 员工表.部门号 = 部门表.部门号 )
如果不想用trigger的话,就在代码里,每次增删改员工表后都执行上面这句。
如果只是根据需要查询部门员工数,根本不用维护“部门表.部门人数”这样一个冗余字段,每次都用上面的SQL语句查询就是了。至于性能问题,如果是SQL Server,员工表记录小于10万条时根本不用考虑。
如果你想让员工表一有修改,部门表中的人数字段立即更改,那就用trigger,trigger里的代码就用楼上的:
update 部门表 部门人数字段 = (select count(*) from 员工表 where 员工表.部门号 = 部门表.部门号 )
如果不想用trigger的话,就在代码里,每次增删改员工表后都执行上面这句。
如果只是根据需要查询部门员工数,根本不用维护“部门表.部门人数”这样一个冗余字段,每次都用上面的SQL语句查询就是了。至于性能问题,如果是SQL Server,员工表记录小于10万条时根本不用考虑。
更多追问追答
追问
可是我启动PowerShell,在里面输:
create trigger tri_update
on bumen
for update
或者直接输类似上面update 部门表 部门人数字段 = (select count(*) from 员工表 where 员工表.部门号 = 部门表.部门号 )
,都提示说“无法将creat/update”项识别为cmblet、函数、脚本文件或可运行程序的名称。我不知道哪里出问题了。。。
追答
兄弟,谁告诉你这么用PowerShell的?基本上PowerShell可以访问.NET环境中的数据库服务器对象,比如 SQL Server中的Trigger对象: Microsoft.SqlServer.Management.SMO.Trigger
但PowerShell不能直接运行SQL代码。请打开SQL Server Management Studio 来编写并执行你的SQL代码(Create Trigger什么的)
如果一定要用PowerShell,参见下面代码:
This code example shows how to create and insert an update trigger on an existing table, named Sales, in the AdventureWorks2012 database. The trigger sends a reminder message when the table is updated or a new record is inserted.
# Set the path context to the local, default instance of SQL Server and to the
#database tables in Adventureworks2012
CD \sql\localhost\default\databases\AdventureWorks2012\Tables\
#Get reference to the trigger's target table
$mytab = get-item Sales.Customer
# Define a Trigger object variable by supplying the parent table, schema ,and name in the constructor.
$tr = New-Object -TypeName Microsoft.SqlServer.Management.SMO.Trigger `
-argumentlist $mytab, "Sales"
# Set TextMode property to False, then set other properties to define the trigger.
$tr.TextMode = $false
$tr.Insert = $true
$tr.Update = $true
$tr.InsertOrder = [Microsoft.SqlServer.Management.SMO.Agent.ActivationOrder]::First
$tr.TextBody = " RAISERROR('Notify Customer Relations',16,10) "
$tr.ImplementationType = [Microsoft.SqlServer.Management.SMO.ImplementationType]::TransactSql
# Create the trigger on the instance of SQL Server.
$tr.Create()
#Remove the trigger.
$tr.Drop()
来自:求助得到的回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询