1

ストアド プロシージャに次の SQL コードがあります。

CREATE PROCEDURE sp_createAColDiffTable (@table_name nvarchar(128))
AS

CREATE TABLE @table_name ( 

[table_name]       VARCHAR (128) NOT NULL,
[column_name]      VARCHAR (128) NULL,
[what_changed]     VARCHAR (128) NULL,
[sr_data_type]     VARCHAR (128) NOT NULL,
[tr_data_type]     VARCHAR (128) NOT NULL,
[sr_max_length]    SMALLINT NOT NULL,
[tr_max_length]    SMALLINT NOT NULL,
[sr_is_nullable]   CHAR NULL,
[tr_is_nullable]   CHAR NULL,
[sr_precision]     SMALLINT NULL,
[tr_precision]     SMALLINT NULL,
[sr_scale]         SMALLINT NULL,
[tr_scale]         SMALLINT NULL )
ON [PRIMARY]
WITH (DATA_COMPRESSION = NONE)

次のようにストアド プロシージャを呼び出します。

EXEC [sp_createAColDiffTable] 'hq193.dbo.arch_con_col_s193_s202'

コードを実行すると、次のエラーが表示されます。

'@table_name' 付近の構文が正しくありません。

実際のテーブル名に置き換えると、@table_name正常に機能します。誰かが私の構文の問題を指摘できますか?

4

7 に答える 7

0

sp_executesql を使用する必要があります。http://technet.microsoft.com/en-us/library/ms188001.aspx を参照してください

于 2013-10-07T12:24:09.117 に答える
0

多分試してみてくださいCREATE TABLE [dbo].[' + @table_name + ']

于 2013-10-07T12:16:54.337 に答える
0

たとえば、名前の変更ストアドプロシージャをいつでも使用できます

CREATE PROCEDURE sp_createAColDiffTable 
(
    @table_name nvarchar(128)
 )
AS

CREATE TABLE TempTable
( 

    [table_name]       VARCHAR (128) NOT NULL,
    [column_name]      VARCHAR (128) NULL,
    [what_changed]     VARCHAR (128) NULL,
    [sr_data_type]     VARCHAR (128) NOT NULL,
    [tr_data_type]     VARCHAR (128) NOT NULL,
    [sr_max_length]    SMALLINT NOT NULL,
    [tr_max_length]    SMALLINT NOT NULL,
    [sr_is_nullable]   CHAR NULL,
    [tr_is_nullable]   CHAR NULL,
    [sr_precision]     SMALLINT NULL,
    [tr_precision]     SMALLINT NULL,
    [sr_scale]         SMALLINT NULL,
    [tr_scale]         SMALLINT NULL 
)

EXEC sp_rename 'TempTable', @table_name
于 2013-10-07T12:30:30.250 に答える