SQL Server 数据库 T-SQL 存储过程中如何将两个 nvarchar 值相加的问题?
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:
我的 SQL 语句中的DECLARE @Names 是大写的不过这里显示成了 @names @Names默认值是NULL,而 NULL+任意内容都是NULL 你好,请问有用过Cimplicity与SQL2014之间通讯吗{:1_919:} clove 发表于 2020-12-2 16:27
@Names默认值是NULL,而 NULL+任意内容都是NULL
这个说的对 这样 isnull(变量1,'')+isnull(变量2,'') renxiaofeixia 发表于 2020-12-2 16:45
这样 isnull(变量1,'')+isnull(变量2,'')
支持,一定要非空判断 renxiaofeixia 发表于 2020-12-2 16:45
这样 isnull(变量1,'')+isnull(变量2,'')
嗯嗯 多谢你{:1_921:} leimingx 发表于 2020-12-2 16:31
你好,请问有用过Cimplicity与SQL2014之间通讯吗
没有呢,我 SQL 一直都是使用的 SQL Server 2008 R2 如果你是练手也就罢了,不建议在存储中写DDL,而且这个业务这么简单也没必要用存储
页:
[1]
2