Результат хранимой процедуры SQL Server 2008 как значение по умолчанию для столбца - PullRequest
2 голосов
/ 17 мая 2010

Прежде всего, спасибо, ребята. Ты всегда знаешь, как руководить мной, когда я даже не могу найти слов, чтобы объяснить, какого чёрта я пытаюсь сделать.

Значения по умолчанию для столбцов в нескольких моих таблицах должны быть равны результату некоторых сложных вычислений для других столбцов в других таблицах. Моя первая мысль - просто иметь значение по умолчанию для столбца, равное результату хранимой процедуры. Я также хотел бы получить один или несколько параметров из столбцов в вызывающей таблице.

Я не знаю синтаксиса, как это сделать, и каждый раз, когда слова "сохранены" и "процедура" приземляются рядом друг с другом в Google, я заливаюсь информацией о значениях параметров по умолчанию и ничего не имею что я на самом деле хочу.

Половина из этого была скорее вопросом, чем вопросом ... хотя есть идеи? И плз, пожалуйста, не говорите: «Ну, вы могли бы использовать триггер при вставке, чтобы ...»

Ответы [ 2 ]

4 голосов
/ 17 мая 2010

Нельзя использовать значение по умолчанию как результат хранимой процедуры, это должна быть функция. Если вы можете преобразовать процедуру в функцию, то вы можете использовать эту функцию. Если вы не можете, то вы должны использовать триггер.

3 голосов
/ 17 мая 2010

Вам придется преобразовать эту хранимую процедуру в пользовательскую функцию. Существуют различные типы 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

К сожалению, вы не можете передавать другие столбцы в качестве параметров своей функции, когда определяете ее как значение по умолчанию для столбца.

Это помогает ??

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...