0

次のカーソルから2つの情報を取得しようとしています:1。サブドメイン2.ドメインID

このスクリプトは、サブドメインの出力が1文字で最初の文字であることを除いて、うまく機能します。したがって、ドメインID 2のサブドメインが「abc.123domain.com」であるとすると、私の結果は「a」になります。

私がここで間違っていることについて何か考えはありますか?別のデータ型を使用する必要がありますか?

USE testDatabase

declare @sql nvarchar(500)
declare @domainID int
declare @subDomain nvarchar(200)
DECLARE @NewLineChar AS CHAR(2) = CHAR(13) + CHAR(10)


declare domainIDCursor CURSOR

FOR 
    select domainID from tblDOMAINS

    OPEN domainIDCursor

    FETCH next from domainIDCursor into @domainID

    WHILE @@FETCH_STATUS = 0
                BEGIN

                set @sql = N' use tblDOMAIN' + convert(nvarchar, @domainID) + @NewLineChar  +
                + ' select @subDomain = (select subDomain from tblLocalDomainInfo (nolock))'

                    execute sp_executesql @sql, N'@subDomain nvarchar output', @subDomain output

                print 'subDomain is ' + @subDomain + ' and the domainID is ' + convert(nvarchar,@domainID)


        FETCH NEXT from domainIDCursor into @domainID
        END

CLOSE domainIDCursor
DEALLOCATE domainIDCursor
4

2 に答える 2

1

convert(nvarchar, @domainID)ここまたはここでサイズを指定しませんでしたN'@subDomain nvarchar output'

  • サイズを指定せずにnvarchar変数を宣言すると、デフォルトでnvarchar(1)になります。
  • サイズを指定せずにnvarcharにキャスト/変換すると、デフォルトでvarchar(30)になります。
于 2012-05-24T16:46:57.147 に答える
1

問題はここにあります:-

execute sp_executesql @sql, N'@subDomain nvarchar output', @subDomain output

そのはず

execute sp_executesql @sql, N'@subDomain nvarchar(200) output', @subDomain output

こちらもご覧ください

declare @ID int
Set @ID = 1000

Select CONVERT(varchar, @ID) --output 1000
Select CONVERT(nvarchar, @ID) --output 1000
于 2012-05-24T16:56:15.570 に答える