2017-08-25 60 views
1

我试图做一个动态存储过程插入记录在表中,我传递表名,模式名称和插入值参数。SQL Server插入到动态参数

我已经使它从表参数中选择列名并将其存储在一个变量中,但我无法管理如何使插入语句工作。

如果任何人都可以帮助我。

这里是我的查询:

DECLARE @TableName VARCHAR(100) 
DECLARE @SchemaName VARCHAR(10) 
DECLARE @Columns NVARCHAR(max) 
DECLARE @VALUES NVARCHAR(MAX) 

SET @SchemaName = 'dbo' 
SET @TableName = 'CLASSROOMS' 
SET @Columns = ''; 
SET @VALUES = 'Classroom1,25' 

SELECT @Columns = @Columns + CAST(COLUMN_NAME AS varchar(50)) + ',' 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = @TableName 
    AND TABLE_SCHEMA = @SchemaName 
    AND ORDINAL_POSITION > 1 

SET @Columns = SUBSTRING(@Columns, 1, Len(@Columns) - 1) 

--SELECT @Columns 

DECLARE @SQL AS NVARCHAR(MAX) 

SET @SQL=N'INSERT INTO ' + @TableName + '(' + @Columns + ') VALUES (' + @VALUES + ')' 

EXEC sp_executesql @SQL 

,这里是Classroom表创建脚本:

CREATE TABLE [dbo].[CLASSROOMS] 
(
    [ClassRoomID] [INT] IDENTITY(1,1) NOT NULL, 
    [ClassRoomName] [NVARCHAR](50) NOT NULL, 
    [MaxSits] [INT] NOT NULL, 

    CONSTRAINT [PK_CLASSROOMS] 
     PRIMARY KEY CLUSTERED ([ClassRoomID] ASC) 
) ON [PRIMARY] 

预先感谢您

回答

2

试试这个:

SET @VALUES='''Classroom1'',25' 

[ClassRoomName]是一个nvarchar字段。

+1

是的,就是这样,非常感谢。当一个男人感到沮丧,看不到那个:)谢谢再次 – user3782230

+0

@bruno击败我秒!我通常会将'EXEC'语句注释掉,然后执行'Select @ SQL'。然后,我可以复制并粘贴到一个新的查询并运行它来检查它是否工作!使调试更容易! – MiguelH

+0

@ bruno.almeida动态更新的一些示例如何? – user3782230