SQL Server 创建表并将列值默认为接收到的变量参数

uelo1irk  于 2022-11-21  发布在  其他
关注(0)|答案(1)|浏览(112)

我 正在 处理 一 个 MSSQL 存储 过程 。
我 从 C # 服务 器 收到 一 个 表 值 参数 ( @accountPropsTVP ) 和 一 个 变量 ( @accountID ) 。
@accountPropsTVP 有 2 列 :

  • valueTypeID int
  • value varchar(max)

注意 : 我 从来 不 确定 这个 表 中 有 多少 行 。
@accountID 是 一 个 int

    • 我 需要 将 收到 的 所有 内容 合并 到 一 个 表 中 , 这样 它 最终 看 起来 就 像 这样 : * *

@temporaryTable

  • @accountID ( 对于 所有 行 始终 相同 )
  • valueTypeID
  • value
    • 以下 是 我 已 尝试 的 操作 , 但 出现 错误 : * *

消息 112 , 级别 15 , 状态 4 , 程序 insertAccountProps , 第 20 行
CREATE TABLE 语句 中 不 允许 使用 变量 。

CREATE PROCEDURE insertAccountProps 
    -- Received parameters
    @accountID int,
    @accountPropsTVP accountPropsTVP READONLY
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- Insert statements for procedure here
    -- declare new table
    DECLARE @accountPropsTemp TABLE
    (
        accountID int not null DEFAULT (@accountID),
        valueTypeID int not null, 
        value varchar(max) not null
    )
    
    -- insert received TVP into new temp table, so that we can manipulate it (tvp's are read only :( )
    INSERT INTO @accountPropsTemp
    SELECT *
    FROM @accountPropsTVP

    -- select all from TVP and add it into temp table created above
    INSERT INTO dbo.accountsProps
    SELECT *
    FROM @accountPropsTemp
END
GO

中 的 每 一 个
也许 有 更 简单 的 方法 ?

ee7vknir

ee7vknir1#

您的问题在这里:

DECLARE @accountPropsTemp TABLE
    (
        accountID int not null DEFAULT (@accountID),
        valueTypeID int not null, 
        value varchar(max) not null
    )

您正在将一个变量指定为默认值,而错误消息明确指出这是不允许的。
最好的方法是将语法更改为:

DECLARE @accountPropsTemp TABLE
(
    accountID int not null,
    valueTypeID int not null, 
    value varchar(max) not null
)

INSERT INTO
    @accountPropsTemp
SELECT 
    @AccountID
    ,ValueTypeID
    ,Value
FROM 
    @accountPropsTVP

相关问题