0

現在、detail属性を持つ1つのテーブルの列のリストを取得する関数があります。もちろん、列がたくさんあるテーブルもあります。したがって、出力は10.000文字を超えます。

ここで私はこのようにテストします:

declare @aa nvarchar(max) 
set @aa = dbo.fnGetColumnList('Table_Name')
print @aa

結果は常に約4000文字になります。SQLがそれを切り捨てたようです。

nvarchar(max)を宣言すると、SQLはこの文字列に対して最大2 ^ 32-1(2GB)をサポートすることを私は知っています。しかし、なぜそれはちょうど約4000文字を持っているのですか?

私がこのように実行するとき:

select dbo.fnGetColumnList('Table_Name')

結果は正しいです。

そして、これが関数のコードです:

-- get column list from table Mapping
ALTER FUNCTION [dbo].[fnGetColumnList] ( @tblName varchar (30))
RETURNS nvarchar(max)
AS
BEGIN

Declare @sql    nvarchar(max)

set @sql = ''
SELECT @sql = @sql + case 
when CHARINDEX('char', LOWER([DBType])) > 0 then ', ['+[DBColumn]+']' + ' ['+[DBType]+']' + ' ('+convert(varchar(10),[Length])+')  NULL' + CHAR(13)
when CHARINDEX('char', LOWER([DBType])) > 0 then ', ['+[DBColumn]+']' + ' ['+[DBType]+']' + ' NULL' + CHAR(13)
ELSE ', ['+[DBColumn]+']' + ' ['+[DBType]+']' + ' NULL' + CHAR(13)
end FROM dbo.Mapping WHERE [DBTable] = @tblName

return @sql
END

進んでください。

4

2 に答える 2

4

以下で説明されているように、これはほとんどの場合、変数割り当てタイプの問題です。

Nvarchar(Max) の場合、TSQL で 4000 文字しか取得できませんか?

そうでない場合は、おそらく Print の設定で表示される文字数が少なすぎることが原因です。

nvarchar(max) はまだ切り捨てられています

更新されたコードを見ると、2 番目の問題のようです。十分な文字を表示するように設定されていないため、印刷が切り捨てられています。

実行するとこれが表示されるはずです

SELECT LEN(@aa)

値が変数に正しく保持されていることを示す、4000 より大きい数値が得られます。

于 2013-03-08T09:53:33.690 に答える
0

SQL Management Studio には次のオプションがあります: [ツール] > [オプション...] > [クエリ結果] > [SQL Server] > [結果をテキストに変換] > [各列に表示される最大文字数]

于 2013-03-08T09:50:52.300 に答える