在SQL Server中使用sp_executesql动态插入表中

问题描述 投票:0回答:1

我有错误

Msg 207,第16级,状态1,第33行无效的列名'Front Brakes1'

执行如下所示的存储过程时:

DECLARE @SqlStatement NVARCHAR(MAX);
SET @SqlStatement = 'INSERT INTO [SalesLT].[Product]('+ @Column+ ') VALUES('+@Value+')';
PRINT @SqlStatement
EXEC sys.sp_executesql  @SqlStatement, N'@Column NVARCHAR(MAX), @Value NVARCHAR(MAX)',@Column,@Value 

PRINT @SqlStatement结果:

INSERT INTO [SalesLT].[Product](Name, ProductNumber, Color, StandardCost, ListPrice, Weight)  
VALUES ("Front Brakes1", "FB-98731", "Silver1", 47.286, 106.5, 317)

另外,这是我要在其中插入数据的表设计:

CREATE TABLE [SalesLT].[Product]
(
    [ProductID] [INT] IDENTITY(1,1) NOT NULL,
    [Name] [dbo].[Name] NOT NULL,
    [ProductNumber] [NVARCHAR](25) NOT NULL,
    [Color] [NVARCHAR](15) NULL,
    [StandardCost] [MONEY] NOT NULL,
    [ListPrice] [MONEY] NOT NULL,
    [Size] [NVARCHAR](5) NULL,
    [Weight] [DECIMAL](8, 2) NULL,
    [ProductCategoryID] [INT] NULL,
    [ProductModelID] [INT] NULL,
    [SellStartDate] [DATETIME] NOT NULL,
    [SellEndDate] [DATETIME] NULL,
    [DiscontinuedDate] [DATETIME] NULL,
    [ThumbNailPhoto] [VARBINARY](MAX) NULL,
    [ThumbnailPhotoFileName] [NVARCHAR](50) NULL,
    [rowguid] [UNIQUEIDENTIFIER] ROWGUIDCOL NOT NULL,
    [ModifiedDate] [DATETIME] NOT NULL,
)
sql-server stored-procedures
1个回答
0
投票

将T-SQL字符串文字用单引号而不是双引号引起来,这样得到的SQL语句是:

INSERT INTO [SalesLT].[Product](Name,ProductNumber,Color,StandardCost,ListPrice,Weight)
VALUES('Front Brakes1','FB-98731','Silver1',47.286,106.5,317);

双引号(或方括号)表示标识符,例如表名和列名。

© www.soinside.com 2019 - 2024. All rights reserved.