admin

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

sql

首先,谢谢大家。当我什至找不到单词来解释我要做什么的时候,您总是知道如何指引我。

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

我不知道该怎么做的语法,每当单词“存储”和“过程”在谷歌中彼此相邻时,我就会充斥着参数默认值的信息,而与我的实际情况无关想。

其中一半更是发泄而不是问题……尽管有什么想法?而且plz plz不要说“嗯,您可以使用插入式触发器来…”


阅读 162

收藏
2021-06-07

共1个答案

admin

您将不得不将该存储过程转换为用户定义的函数。返回类型不同的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

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

有帮助吗?

2021-06-07