我正在研究MSSQL存储过程。
我从c#服务器收到一个表值参数(@accountPropsTVP)和一个变量(@accountID)。
@accountPropsTVP有两列:
@accountID是一个int
我需要将收到的所有内容合并到一个表中,以便最终看起来像这样:
@temporaryTable:
以下是我的尝试,但收到错误:
Msg 112,Level 15,State 4,Procedure 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
也许有一种更简单的方法可以做到这一点?
答案 0 :(得分:9)
您的问题在这里:
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