【问题标题】:Help with understanding SQL stored procedure parameters帮助理解 SQL 存储过程参数
【发布时间】:2011-05-10 16:05:19
【问题描述】:

我是 SQL 新手,现在正在使用存储过程。 我在看另一个开发者的代码,看到了这样的说法:

ALTER PROCEDURE [deleteRecords_UNICODE]
@RecordIDs ty_NumberList READONLY

问题一:“ty_NumberList”是什么意思?

问题2:我正在创建一个需要使用上述参数的存储过程。 当我创建“DECLARE @RecordNum int”时,我显然得到了

的错误
Operand type clash: int is incompatible with ty_NumberList

我猜我必须通过以下方式解决这个问题:
a) 创建“ty_NumberList”类型的变量
b) 然后使用我通常的 DECLARE @RecordNum int
c) 然后将@RecordNum 的值传入ty_NumberList

问题 3:我将如何在 SQL 中实现上述步骤?

任何帮助将不胜感激!

【问题讨论】:

    标签: sql-server tsql sql-server-2008 stored-procedures


    【解决方案1】:

    ty_NumberListtable valued parameter 的类型。

    你会像这样使用它

    DECLARE @Nums AS ty_NumberList;
    
    INSERT INTO @Nums VALUES (1);
    
    EXEC YourProc @Nums;
    

    【讨论】:

    • 那段代码如何使它成为表值参数?没有看到 CREATE TYPE 语句,它不能是任何用户定义的类型吗?
    • READONLY 对 TVP 是强制性的(不确定它是否对其他数据类型有效,但无论如何它的存在和类型的名称都会向我表明 TVP)
    • @AL W:查看CREATE TYPE后,我可以确认它确实是TVP。感谢@Martin 关于READONLY 的说明。
    【解决方案2】:

    该代码正在使用Table-Valued Parameters,请在在线图书中阅读:http://msdn.microsoft.com/en-us/library/bb510489.aspx

    【讨论】:

      【解决方案3】:

      阅读本文

      ty_number 表示您必须告诉我们 因为它是用户定义的数据类型

      在声明存储过程时 参数

      我们不需要声明

      创建过程样本@name vanchar(20), @num varchar(20) 开始

      选择……………………

      结束

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-12-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-05
        相关资源
        最近更新 更多