他の SQL、特に変数宣言を書くためのものを生成するのに役立つ簡単なユーティリティを作成しようとしています。出力は (まだ) きれいで完璧である必要はありませんが、すばやく簡単に修正できるほど十分に近いものでなければなりません。(はい、まだすべてのケースを処理しているわけではないことはわかっています。これは問題を説明するための単純なケースです。)
use myDB
DECLARE @varcharflds table
(tname varchar(50) not null,
fname varchar(50) not null,
dtype varchar(50) not null,
dlen varchar(50)
)
INSERT INTO @varcharflds
SELECT TABLE_NAME,COLUMN_NAME,DATA_TYPE,CHARACTER_MAXIMUM_LENGTH
FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='myTable'
select * from @varcharflds
declare utable_cursor cursor FOR
select tname, fname, dtype, dlen from @varcharflds
open utable_cursor
Declare @tname varchar(50),@fname varchar(50), @dtype varchar(50), @dlen varchar(50)
Declare @vardefstring4 varchar(3000)
Set @vardefstring4 = ''
Fetch Next from utable_cursor into @tname, @fname, @dtype, @dlen
WHILE @@FETCH_STATUS = 0
BEGIN
print @dlen
set @vardefstring4 = @vardefstring4 +
(case WHEN @dtype in ('datetime', 'date', 'bit')
THEN @dtype ELSE '(' + cast (@dlen as varchar(5)) + ')' END) + ', '
Fetch Next from utable_cursor into @tname, @fname, @dtype, @dlen
END
print '>' + @vardefstring4 + '<'
print 'done'
問題は、 cast (@dlen as varchar(5)) を読み取る部分です。それを文字列定数に置き換えると機能しますが、定数以外の式は機能しません。「完了」メッセージが表示されますが、最初のメッセージには何も表示されません。山かっこも表示されません。その周りにtry catchを配置して、エラーメッセージを出力しようとしました-メッセージはありません。null dlenで認識していないタイプを使用している可能性があると思いました...いいえ。私は恥ずかしいほど長い間これに取り組んできました。どんな助けでも感謝します。