誰かが私の声明を確認できますか?.
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
変数にデータを挿入することです
たとえば、@tblName
の結果はCustomerInfo
です。
次に、@strSQL
で、@tblName
の結果を挿入コマンドのテーブル名として使用します。
したがって、@strSQL
変数は次のようになります。
INSERT INTO CustomerInfo VALUES(......)
あなたの他の質問に対する私の答えからこれを試してください:
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)
あなたはまだ使用しているSQL Serverのバージョンについて言及していません。ただし、SQL Server 2005以降では、sysobjects
およびsysindexes
の使用を停止する必要があります。代わりに、同じ情報を含む新しいsys
スキーマを使用してください。簡単に入手できます。
新しいsys
スキーマで利用可能なものと、それを最大限に活用する方法の詳細については、[MSDN:SQL Serverシステムカタログのクエリ] [1]を参照してください。
1つのDECLAREステートメントで複数の変数を宣言する場合、 型を1回だけ置く (最後に):
DECLARE @tblName, @strSQL varchar(MAX)
これは実際に実行できるものでなければなりません:
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サーバーがそれをステートメントとして実行することを期待しないことを意味します。文字列内の変数と同じことはできません。