gpt4 book ai didi

sql-server - 创建一个表并将默认列值设置为接收到的变量参数

转载 作者:行者123 更新时间:2023-12-03 01:53:52 25 4
gpt4 key购买 nike

我正在开发 MSSQL 存储过程。

我从 C# 服务器收到一个表值参数 (@accountPropsTVP) 和一个变量 (@accountID)。

@accountPropsTVP 有 2 列:

  • valueTypeID int
  • 值 varchar(max)

注意:我永远不确定该表中有多少行。

@accountID 是一个 int

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

@temporaryTable:

  • @accountID(所有行始终相同)
  • valueTypeID

以下是我尝试过的方法,但出现错误:

Msg 112, Level 15, State 4, Procedure insertAccountProps, Line 20
Variables are not allowed in the CREATE TABLE statement.

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

也许有更简单的方法来做到这一点?

最佳答案

您的问题在这里:

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

关于sql-server - 创建一个表并将默认列值设置为接收到的变量参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21995587/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com