SQL Server 2008 stored procedure result as column default value

早过忘川 提交于 2021-01-28 04:38:03

问题


First of all, thank you guys. You always know how to direct me when I can't even find the words to explain what the heck I'm trying to do.

The default values of the columns on a couple of my tables need to be equal the result of some complicated calculations on other columns in other tables. My first thought is to simply have the column default value equal the result of a stored procedure. I would also have one or more of the parameters pulled from the columns in the calling table.

I don't know the syntax of how to do it though, and any time the word "stored" and "procedure" land next to each other in google I'm flooded with info on Parameter default values and nothing relating to what I actually want.

Half of that was more of a vent than a question...any ideas though? And plz plz don't say "Well, you could use an On-Insert Trigger to..."


回答1:


You would have to convert that stored procedure to a user-defined function. There are different types of UDF's - the one you're looking at would be the scalar UDF - returning a single value.

So for instance you could create a function like this:

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

Of course, yours would be a lot more complicated :-)

Once you've done that, you can define this to be the default for a column of type VARCHAR(100) - either directly when declaring the table, or later on via an ALTER TABLE statement:

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

or :

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

Unfortunately, you cannot pass other columns as parameters to your function when defining it as a default value for a column.

Does that help??




回答2:


You can't have the default be the result of a stored procedure, it has to be a function. If you can convert the procedure into a function, then you can use that function. If you cannot, then you must use a trigger.



来源:https://stackoverflow.com/questions/2851292/sql-server-2008-stored-procedure-result-as-column-default-value

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!