假设我有以下存储过程:
CREATE PROCEDURE test
@my_var varbinary
AS
SELECT @my_var as my_var
但是我想修改它以使@my_var
具有默认值。我不知道这个值究竟是什么,但我知道在数据库中的位置。
类似的东西:
declare @var int
SELECT @var = my_variable from my_table where something = 'what I need'
GO
CREATE PROCEDURE test
@my_var varbinary = @var
AS
SELECT @my_var as my_var
然而,这失败了。 @var似乎超出了范围。
是否有可能做某种事情?
谢谢!
答案 0 :(得分:2)
在运行时使用值:
CREATE PROCEDURE test
@my_var varbinary = NULL
AS
BEGIN
IF @my_var IS NULL
SELECT @my_var = my_variable from my_table where something = 'what I need'
SELECT @my_var as my_var
END
要在创建时使用值,请构建CREATE PROC
字符串并执行它
declare @var int
declare @SQL VARCHAR(4000)
SELECT @var = id from sysobjects where id =3
SET @SQL = 'CREATE PROCEDURE test @my_var varbinary = ' + CAST(@var AS VARCHAR(20)) + '
AS
SELECT @my_var as my_var'
EXEC(@SQL)
正如我所提到的......如果你只创造一次,那为什么还要把它变得复杂呢?如果您要多次创建它,那么您应该在运行时执行此操作。如果要部署到许多数据库,可能会有一些调用来执行此操作,但在这种情况下,您可能需要考虑将其包装到数据库项目中