2017-08-25 15 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

関連する問題