为接收到的可变参数创建表和默认列值
Posted
技术标签:
【中文标题】为接收到的可变参数创建表和默认列值【英文标题】:Create a table and default column value to a received variable parameter 【发布时间】:2014-02-24 18:09:14 【问题描述】:我正在处理一个 MSSQL 存储过程。
我从 c# 服务器收到一个表值参数 (@accountPropsTVP) 和一个变量 (@accountID)。
@accountPropsTVP 有 2 列:
valueTypeID int 值 varchar(max) 注意:我永远不确定此表中有多少行@accountID 是一个整数
我需要将收到的所有内容合并到一个表中,以便最终看起来像这样:
@temporaryTable:
@accountID(所有行始终相同) valueTypeID 价值以下是我尝试过的,但出现错误:
消息 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
也许有更简单的方法?
【问题讨论】:
您没有发布 CREATE TABLE 语句 .... 听起来您可能需要动态 SQL,但没有看到您的 create table 语句,我无法确定解决方案是什么。 他确实发过了,是DECLARE @accountPropsTemp TABLE
。
错误的措辞让我失望。
【参考方案1】:
您的问题在这里:
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
【讨论】:
我不知道 Col1、Col2 和 Col3 是从哪里来的 @sunfish 好吧,你没有告诉我们表变量中的列名,所以我把占位符放进去。 我不想听起来很滑稽,但请再看看我的问题,如果我没有告诉你列名,请告诉我。 @sunfish 您没有告诉我们自定义表类型@accountPropsTVP
的列名。我不假设源列名和目标列名相同。我无法知道accountPropsTVP
表类型中有哪些列。
@sunfish 我是个傻瓜,因为我读的是代码而不是上面的 cmets :) 抱歉!以上是关于为接收到的可变参数创建表和默认列值的主要内容,如果未能解决你的问题,请参考以下文章