0

我试图从以下光标中获取两条信息:1. 子域 2. 域 ID

这个脚本运行良好,除了 subdomain 的输出只是单个和第一个字母。因此,假设域 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 回答