还是SQL的问题,我想做一个表值函数

主要涉及两个表--部门表和员工表,根据员工表中员工的部门号来更新部门表中的每个部门的人数。表值函数应该怎么写啊?谢谢谢谢... 主要涉及两个表--部门表和员工表,根据员工表中员工的部门号来更新部门表中的每个部门的人数。表值函数应该怎么写啊?谢谢谢谢 展开
 我来答
百度网友1950a79df
2012-04-10 · TA获得超过933个赞
知道小有建树答主
回答量:312
采纳率:0%
帮助的人:363万
展开全部
你提到“表值函数”,让我不明白你的需求到底是什么。
如果你想让员工表一有修改,部门表中的人数字段立即更改,那就用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()
来自:求助得到的回答
Aaron2012Chen
2012-04-09 · 超过33用户采纳过TA的回答
知道答主
回答量:79
采纳率:0%
帮助的人:82.3万
展开全部
表值函数返回的是一个查询表,而不是用来做一个动作的。下面这句SQL 可以写在一个存储过程中调用,也可直接调用。
update 部门表 部门人数字段 = (select count(*) from 员工表 where 员工表.部门号 = 部门表.部门号 )
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式