【问题标题】:Insert User Defined Data Table in a stored procedure在存储过程中插入用户定义的数据表
【发布时间】:2013-06-13 20:25:08
【问题描述】:

以下是我到目前为止的存储过程,执行时我不断收到此错误: 消息 137,级别 16,状态 1,过程 db_recession_band_dates_save,第 18 行 必须声明标量变量“@dates”。

ALTER PROCEDURE [dbo].[Dates_Save]
@Loc VARCHAR(75),
@dates StartEndDateType READONLY  
AS
BEGIN
DECLARE @id int
SELECT @id = MYINTFIELD FROM date_locations
IF @id IS NULL
BEGIN
    INSERT INTO db_recession_bands VALUES (@loc)
    SET @id = @@IDENTITY
END
INSERT INTO db_recession_band_dates VALUES (@id,@dates)      
END

【问题讨论】:

  • @dates 的典型值是多少? (例如,如果你调试你的 sp)
  • @dates 来自 DataTable 类型,其中一列是开始日期,另一列是结束日期。
  • 你试过调试这个sp吗?
  • 正如我所说的那样——你把@dates 当作一张桌子来对待。目前您将其视为标量值(正如错误消息所述)

标签: sql-server tsql stored-procedures


【解决方案1】:

如果 StartEndDateType 是用户定义的表格类型,那么您将其视为表格。

改变这个:

INSERT INTO db_recession_band_dates VALUES (@id,@dates)

进入类似的东西

INSERT INTO db_recession_band_dates (<COLUMN LIST>) -- don't do blind inserts it will hurt you at some point in the future
SELECT @id, <COLUMN LIST>
FROM @dates

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多