如何在SQL Server中的变量中保存值

时间:2018-10-19 08:20:27

标签: sql-server

我需要获取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

2 个答案:

答案 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