SQL Server 2008存储过程结果为列默认值

时间:2010-05-17 17:33:40

标签: sql sql-server-2008 stored-procedures

首先,谢谢你们。当我甚至无法找到解释我想要做的事情时,你总是知道如何指导我。

我的几个表上的列的默认值需要等于其他表中其他列的一些复杂计算的结果。我的第一个想法是让列默认值等于存储过程的结果。我还可以从调用表中的列中提取一个或多个参数。

我不知道如何做到这一点的语法,并且任何时候“存储”和“程序”这个词在谷歌中彼此相邻,我充斥着参数默认值的信息,没有任何相关的内容我真正想要的是什么。

其中一半更像是一个发泄而不是一个问题......但是有任何想法吗?并且plz plz没有说“嗯,你可以使用插入触发器来......”

2 个答案:

答案 0 :(得分:4)

您不能将默认值作为存储过程的结果,它必须是一个函数。如果您可以将过程转换为函数,则可以使用该函数。如果你不能,那么你必须使用触发器。

答案 1 :(得分:3)

您必须将该存储过程转换为用户定义的函数。有不同类型的UDF - 您正在查看的是标量UDF - 返回单个值。

例如,你可以创建一个这样的函数:

CREATE FUNCTION dbo.YourDefaultFunction(@Input1 INT, @Input2 VARCHAR(10))
RETURNS VARCHAR(100)
AS BEGIN
   DECLARE @Result VARCHAR(100)

   SET @Result = @Input2 + ' - giving: ' + CAST(@Input1 AS VARCHAR(5))

   RETURN @Result
END

当然,你的会更复杂: - )

完成后,您可以将其定义为VARCHAR(100)类型的列的默认值 - 直接在声明表时,或稍后通过ALTER TABLE语句:

CREATE TABLE dbo.YourTable(.......
   SomeColumn VARCHAR(100)    
      CONSTRAINT DF_YourTable_SomeColumn 
      DEFAULT (dbo.YourDefaultFunction(417, 'Test')),
   .....)

或:

ALTER TABLE dbo.YourTable
  ADD CONSTRAINT DF_YourTable_SomeColumn 
  DEFAULT (dbo.YourDefaultFunction(4711, 'Test2')) 
  FOR SomeColumn

不幸的是,在将其定义为列的默认值时,您无法将其他列作为参数传递给函数。

这有帮助吗?