吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1791|回复: 11
收起左侧

[求助] SQL Server 数据库 T-SQL 存储过程中如何将两个 nvarchar 值相加的问题?

[复制链接]
akjarjash 发表于 2020-12-2 15:31
SQL :
-- 指定所要使用的数据库
USE master
GO

-- 判断数据库是否存在
IF (EXISTS(SELECT * FROM sys.databases WHERE name = 'MyDB'))
BEGIN
        PRINT '数据库已存在将删除......'
        DROP DATABASE MyDB
END
GO

-- 创建数据库
CREATE DATABASE MyDB
ON PRIMARY
(
        NAME = 'MyDB_DATA',
        FILENAME = 'D:\MyDB_DATA.mdf',
        SIZE = 5MB,
        FILEGROWTH = 10%
)
LOG ON
(
        NAME  = 'MyDB_LOG',
        FILENAME = 'D:\MyDB_LOG.ldf',
        SIZE = 1MB,
        FILEGROWTH = 10%
)
GO

-- 指定当前要使用的数据库
USE MyDB
GO

-- 判断数据表是否存在
IF (EXISTS(SELECT * FROM sys.objects WHERE name = 'T_Class'))
BEGIN
        PRINT '数据表已经存在将删除......'
        DROP TABLE T_Student
END
GO

-- 创建数据表
CREATE TABLE T_Class
(
        Id INT PRIMARY KEY IDENTITY(1,1),
        Name NVARCHAR(50) NOT NULL,
)
GO

-- 判断数据表是否存在
IF (EXISTS(SELECT * FROM sys.objects WHERE name = 'T_Student'))
BEGIN
        PRINT '数据表已经存在将删除......'
        DROP TABLE T_Student
END
GO

-- 创建数据表
CREATE TABLE T_Student
(
        Id INT PRIMARY KEY IDENTITY(1,1),
        Name NVARCHAR(50) NOT NULL,
        Age INT NOT NULL CHECK(Age >= 0 AND Age <= 150) DEFAULT(0),
        ClassId INT,
        FOREIGN KEY (ClassId) REFERENCES T_Class(Id) ON UPDATE NO ACTION ON DELETE CASCADE
)
GO

-- 执行记录插入操作
INSERT INTO T_Class VALUES ('初一一班')
INSERT INTO T_Class VALUES ('初一二班')
INSERT INTO T_Class VALUES ('初一三班')
GO

-- 执行插入记录操作
INSERT INTO T_Student VALUES ('小明',20,1)
INSERT INTO T_Student VALUES ('小红',21,2)
INSERT INTO T_Student VALUES ('小花',22,3)
INSERT INTO T_Student VALUES ('小兰',23,2)
INSERT INTO T_Student VALUES ('小白',24,3)
GO

-- 执行更新操作
UPDATE T_Student SET ClassId = 1 WHERE Name = '小白' AND ClassId = 3
GO

-- 执行删除操作
UPDATE T_Student SET ClassId = NULL WHERE Name = '小白'
GO
DELETE FROM T_Student WHERE Name = '小白'
GO

-- 执行查询操作
IF (EXISTS(SELECT * FROM sys.objects WHERE name = 'usp_query'))
BEGIN
        PRINT '相关存储过程已经存在......'
        DROP PROC usp_query
END
GO

-- 创建存储过程
CREATE PROC usp_query
        @Top INT = 0,
        @names NVARCHAR(255) OUTPUT
AS
BEGIN
        -- 定义一个游标
        PRINT '@Top = ' + CAST(@Top AS NVARCHAR(50))
        DECLARE MyCursor CURSOR LOCAL SCROLL
        FOR SELECT Top(@Top) s.Name AS 学生姓名, c.Name AS '班级名称' FROM T_Student s LEFT JOIN T_Class c ON c.Id = s.ClassId
        -- 打开游标
        OPEN MyCursor
        -- 读取游标
        DECLARE @StudentName NVARCHAR(50)
        DECLARE @ClassName NVARCHAR(50)
        DECLARE @TempStr NVARCHAR(50)
        FETCH FIRST FROM MyCursor INTO @StudentName , @ClassName
        WHILE (@@FETCH_STATUS = 0)
        BEGIN
                PRINT '学生名称:' + @StudentName + '|' + '班级名称:' + @ClassName
                SET @TempStr = '[' + @StudentName + '|' + @ClassName + ']'
                PRINT '临时文本:' + @TempStr
                SET @Names = @TempStr + @Names
                PRINT '------------------------------------------------------------'
                PRINT '姓名数据:' + @Names
                SET @Names = @Names + @TempStr
                SET @TempStr = ''
                FETCH NEXT FROM MyCursor INTO @StudentName,@ClassName
        END
        -- 关闭游标
        CLOSE MyCursor
        -- 释放游标
        DEALLOCATE MyCursor
        -- 设置返回
        RETURN 0
END
GO

-- 执行存储过程
DECLARE @returnResult INT
DECLARE @outputResult NVARCHAR(255)
EXEC @returnResult = usp_query 3 , @outputResult OUTPUT
SELECT @returnResult 返回结果 , @outputResult 输出结果
GO


为什么最后的结果为 NULL:
image.png

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| akjarjash 发表于 2020-12-2 15:32
我的 SQL 语句中的  DECLARE @Names 是大写的不过这里显示成了 @names
clove 发表于 2020-12-2 16:27
@Names默认值是NULL,而 NULL+任意内容都是NULL

免费评分

参与人数 1热心值 +1 收起 理由
akjarjash + 1 谢谢@Thanks!

查看全部评分

leimingx 发表于 2020-12-2 16:31
renxiaofeixia 发表于 2020-12-2 16:44
clove 发表于 2020-12-2 16:27
@Names默认值是NULL,而 NULL+任意内容都是NULL

这个说的对
renxiaofeixia 发表于 2020-12-2 16:45
这样 isnull(变量1,'')+  isnull(变量2,'')

免费评分

参与人数 1吾爱币 +1 收起 理由
akjarjash + 1 我很赞同!

查看全部评分

理工精英 发表于 2020-12-2 16:47
renxiaofeixia 发表于 2020-12-2 16:45
这样 isnull(变量1,'')+  isnull(变量2,'')

支持,一定要非空判断
 楼主| akjarjash 发表于 2020-12-2 17:16
renxiaofeixia 发表于 2020-12-2 16:45
这样 isnull(变量1,'')+  isnull(变量2,'')

嗯嗯 多谢你
 楼主| akjarjash 发表于 2020-12-2 17:17
leimingx 发表于 2020-12-2 16:31
你好,请问有用过Cimplicity与SQL2014之间通讯吗

没有呢,我 SQL 一直都是使用的 SQL Server 2008 R2
clove 发表于 2020-12-3 12:52
如果你是练手也就罢了,不建议在存储中写DDL,而且这个业务这么简单也没必要用存储
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 10:49

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表