私はこれが私のコードでダイナミックSELECT
どのように動的SQLの結果から値を抽出するのですか?
からいくつかの値を取得しようとしている:
DECLARE @sqlCommand varchar(1000)
DECLARE @colName varchar(20)
DECLARE @tableName varchar(20)
DECLARE @myNum int
DECLARE @varDate varchar(19)
DECLARE @myTime datetime2
set @varDate = getdate()
SET @colName = 'col1'
SET @tableName = 'table'
SET @sqlCommand = 'SELECT top 1 @myTime=mytime, @myNum=' + @colName + ' FROM ' + @tableName + ' WHERE mytime>=''' + @varDate + ''' ORDER BY mytime'
PRINT @sqlCommand
EXEC(@sqlCommand)
私はSQLコマンドを印刷するとき、これは私が得るものです:
SELECT top 1 @myTime=mytime, @myNum=col1
FROM table
WHERE mytime>='Jul 25 2017 4:40PM'
ORDER BY mytime
私はそれをEXEC
しようとすると、私はこのエラーを取得:
Must declare the scalar variable "@myTime".
これを行うと:
SET @sqlCommand = 'SELECT top 1 mytime, ' + @colName + ' FROM ' + @tableName + ' WHERE mytime>=''' + @varDate + ''' ORDER BY mytime'
これはうまくいきますが、そのデータを使用する必要があります。
ありがとうございます。
@sqlCommandを作成してexec()で実行する必要があるのはなぜですか? – DontThinkJustGo
@DontThinkJustGo。 。 。テーブル名は動的です。 –
sqlCommand宣言の前に一時テーブルを作成し、SELECTの代わりに一時テーブルにINSERTを実行してください。 execコマンドの後にtempテーブルの内容を読みます(編集:sp_executesqlの回答がより良い解決策を提供します) – Cristian