【发布时间】:2014-09-20 16:10:12
【问题描述】:
我在 SQL Server 2008 R2 中创建了一个存储过程来执行这样的高级搜索:
ALTER PROCEDURE [dbo].[AdvanceSearch]
-- Add the parameters for the stored procedure here
@SearchType nvarchar(10) = null,
@SerialNumber varchar(50) = null,
//code goes here
目前,@SerialNumber 变量表示名为 Assets 的表中的一个真实列。序列号列的数据类型为varchar(50),它允许空值。
所以我所做的是我手动定义了相同的数据类型,即varchar(50)。但我的问题是,如果将来我更改Assets 表中SerialNumber 列的数据类型,那么我必须更改存储过程中的类型。
有没有办法将存储过程中@SerialNumber 参数的数据类型定义为与另一个表中列的数据类型相同?那么如果列类型发生变化,存储过程参数将具有新的数据类型?
谢谢
【问题讨论】:
-
不,这样的事情在 SQL Server 中是不可能的。存储过程参数的类型必须在存储过程声明中完整且静态地声明 - 它们不能在运行时根据某个表的列的数据类型进行更改
-
正如@marc_s 所说,您不能在 SQL Server 中执行此操作。在 Oracle 中是可能的,这可能是您以前见过的地方。
-
不幸的是,应该使类似于此工作的功能(用户定义的类型 - 您可以声明一个序列号类型,然后列和参数都将是该类型)在 SQL Server 中被严重破坏。
标签: sql sql-server stored-procedures sql-server-2008-r2