Transact SQL仅使用游标打印第一个字母

时间:2014-03-28 13:43:12

标签: sql sql-server tsql

我遇到了问题。我已经声明了一个游标,当我获取它时,我想打印一个变量(类型为nvarchar)但是对于每一行我只得到第一个字母 这是我的代码:

DECLARE @loginSoftware nvarchar
DECLARE @loginId int
DECLARE @softwareId int
DECLARE @passwordSoftware nvarchar
DECLARE @SoftwareFamily nvarchar
DECLARE @SoftwareName nvarchar
DECLARE @password nvarchar
DECLARE Get_Password cursor 
        for (select loginId, charly.softwareId, login, password FROM REFC_SOFTWARE_LOGIN, v_charly_HOSTS_AND_SOFTS_INFOS charly 
                  WHERE charly.softwareId = REFC_SOFTWARE_LOGIN.softwareId
                  AND charly.SoftwareFamily = 'DB'
                  and SoftwareName in ('Oracle', 'SQL Server', 'MYSQL') )

OPEN Get_Password 

FETCH NEXT FROM Get_Password INTO @loginId, @softwareId, @loginSoftware, @passwordSoftware

WHILE (@@FETCH_STATUS = 0) 
BEGIN 

--raiserror (@passwordSoftware, 10,1) with nowait 
SET @password = @passwordSoftware
PRINT @password 
FETCH NEXT FROM Get_Password INTO @loginId, @softwareId, @loginSoftware,   @passwordSoftware
END 

CLOSE Get_Password
DEALLOCATE Get_Password

打印整个变量值需要更改什么? 我犯了什么错误吗?

提前感谢您的帮助和时间

3 个答案:

答案 0 :(得分:1)

nvarchar个变量有一个长度。如果您未声明nvarchar(20),则默认长度为1。

答案 1 :(得分:0)

DECLARE @loginSoftware NVARCHAR

SET @loginSoftware ='fdjafs'

PRINT @loginSoftware

只会给你第一个字母。

DECLARE @loginSoftware NVARCHAR(2000)

SET @loginSoftware ='fdjafs'

PRINT @loginSoftware

将全部给你....所以基本上你也必须指定数据长度。

答案 2 :(得分:0)

NVARCHAR的默认长度为1.您必须使用长度声明它。