我需要获取First_name的最大长度并将其放入@sq中,我遇到了错误。
Declare @sq nvarchar(max)
Set @sq=''
SELECT MAX(LEN(FIRST_NAME)) FROM #table1
Drop table #t
SELECT CASE WHEN LEN(SEQ_NUM) = 0 THEN NULL ELSE SEQ_NUM END AS REC_NUM,
CASE WHEN LEN(FIRST_NAME) = 0 THEN NULL ELSE CONVERT(CHAR(Select @sq)),RTRIM(UPPER(FIRST_NAME))) END AS FIRST_NAME
into #t
from #tabel1
答案 0 :(得分:2)
此SQL存在一些问题。如果我们从第一个语句开始:
Set @sq=''SELECT MAX(LEN(FIRST_NAME)) FROM #table1
您在这里有几个单引号('
);不知道他们在做什么。其次,如果您要从数据集中分配变量值,则语法为SELECT {Variable} = {expression} [,{Variable} = {expression} [,...]] FROM {etc}
,因此您将获得:
SELECT @sq = MAX(LEN(FIRST_NAME))
FROM #table1;
下一条语句,真是一团糟。首先,这里还有一个任性的右括号()
):RTRIM(UPPER(FIRST_NAME)))
应该只有2。
表达式CONVERT(CHAR(Select @sq))
是非常错误的。 CONVERT
需要2个参数,但只有一个,并且CHAR
将返回一个字符,以提供所提供的适当数字。即CHAR(65)
返回A
。我怀疑,您的意思是CONVERT(char,@sq)
(实际上应该在这里声明一个长度!),但是,@sq
已经是nvarchar(max)
(这也毫无意义,因为它被分配了int
的值)。因此,我真的不知道您要在这里实现什么。
答案 1 :(得分:1)
您需要分配变量,如下所示:
--source-maps