7

誰かが私の声明をチェックできますか...

DECLARE @tblName varchar(MAX), 
        @strSQL varchar(MAX)

SET @tblName ='SELECT DISTINCT o.name as TableName 
                 FROM sysobjects o 
                 JOIN sysindexes x on o.id = x.id  
                WHERE o.name LIKE ''%empty%'''  

SET @strSQL = 'INSERT INTO @tblName VALUES(''trylng'', ''1'')'
EXEC (@strSQL)

私のエラーは...

メッセージ1087、レベル15、状態2、行1
テーブル変数「@tblName」を宣言する必要があります。

私がやりたいのは、変数のテーブル名を取得し、変数に@tblNameデータを挿入することです@strSQL

たとえば...の結果@tblNameCustomerInfo

次に、@strSQLの結果を@tblName挿入コマンドのテーブル名として使用します。

したがって、@strSQL変数は次のようになります。

INSERT INTO CustomerInfo VALUES(......)
4

3 に答える 3

2

1つのDECLAREステートメントで複数の変数を宣言する場合は、タイプを1回だけ(最後に)配置します。

DECLARE @tblName, @strSQL varchar(MAX)
于 2012-02-23T06:03:56.640 に答える
2

あなたの他の質問に対する私の答えからこれを試してください:

 SELECT TOP 1 @tblName = t.name
 FROM sys.tables t
 INNER JOIN sys.indexes i on i.object_id = t.object_id  
 WHERE t.name LIKE '%empty%'

 SET @strSQL = 'INSERT INTO ' + @tblName  + ' VALUES(''trylng'', ''1'')'
 EXEC (@strSQL)

使用しているSQLServerのバージョンについてはまだ言及していません。ただし、SQL Server 2005以降では、使用を中止しsysobjectssysindexes代わりに、sysほぼ同じ情報を含む新しいスキーマを使用する必要がありますが、より簡単に利用できます。

sys新しいスキーマで利用できるものとそれを最大限に活用する方法の詳細については、[MSDN:SQLServerシステムカタログのクエリ][1]を参照してください。

于 2012-02-23T06:15:08.690 に答える
1

これは実際に実行できるものである必要があります。

DECLARE @tblName varchar(MAX), 
        @strSQL varchar(MAX)

SET @tblName =  (SELECT DISTINCT TOP 1  o.name as TableName 
                 FROM sysobjects o 
                 JOIN sysindexes x on o.id = x.id  
                WHERE o.name LIKE '%empty%')

SET @strSQL = 'INSERT INTO ' + @tblName + ' VALUES(''trylng'', ''1'')'
EXEC (@strSQL)

引用符で囲まれているものは、それが文字列であり、SQLサーバーがステートメントとして実行することを期待しないことを意味します。文字列内の変数と同じことです。引用符で囲むことはできません。

于 2012-02-23T06:11:52.217 に答える