sqlserver问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sqlserver问题相关的知识,希望对你有一定的参考价值。

在同一数据库中有2个不同的表比如
A表:id,name
B表:id,names
如何通过sql语句把A表的数据导入到B表中

如果这2个表不在同一个数据中 分别在2个数据库中 sql语句又改如何写好
insert into b select id,names from a 正确的应该是这样的

参考技术A 1.insert into b([id],name) select [id],names from a;
2.insert into 库a.b([id],name) select [id],names from 库b.a;

sqlserver 存储过程问题

create procedure [dbo].[ReportMarkShow]
(
@BusinessId bigint,
@order nvarchar(20),
@UserId nvarchar(20)
)
as
BEGIN
declare @str varchar(5000)
declare @sql varchar(5000)

if @UserId = '0'
set @str = @str + ' and 1=1 '
else
set @str = @str + ' and Send_UserId = ' + convert(nvarchar,@UserId)

if @order = 'year'
set @str = @str + ' and Post_Date between Dateadd(yy,datediff(yy,0,getdate()),0) and Dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1, 0)) '
else if @order = 'month'
set @str = @str + ' and Post_Date between Dateadd(mm,datediff(mm,0,getdate()),0) and Dateadd(ms,-3,dateadd(mm,datediff(m,0,getdate())+1,0)) '
else if @order = 'week'
set @str = @str + ' and Post_Date between Dateadd(wk,datediff(wk,0,getdate()),-1) and Dateadd(wk,datediff(wk,0,getdate()),6)'
else if @order = 'day'
set @str = @str + ' and (DATEDIFF(d, fn NOW() , Post_Date) = 0)'
else
set @str = @str + ''

set @str = @str + ' order by Post_Date desc'

set @sql = 'SELECT Report_Id, Business_Id, Send_UserID, Receive_UserId, State_Msg, Subject_Msg, Content_Msg, Post_Date,Is_Open
FROM ReportMsg where State_Msg=1 and Business_Id='+convert(nvarchar,@BusinessId)

exec(@sql+@str)

END

自己写的,不报错,但返回的结果根本不对,我加上
@str = @str + ' and 1=2 ' 它也能给我返回结果,好像根本不知道有@str的存在,请高手指点,先谢谢了

参考技术A 楼主没有把表的结构贴出来,没有类型不好判断。
错误1 @str 定义后没有初始化。
如果只是定义,不初始化,那么它就是null。
set @str = @str + ' and 1=1 ' 这句话运行后,@str的值还是null,因为null型的varchar ‘+’运算后还是null。
如果将@str初始化后,以以下的引数运行你的存储过程:
@BusinessId = '0',
@order = 'year',
@UserId = '0'
得到的sql语句(@sql+@str)是:
SELECT Report_Id, Business_Id, Send_UserID,
Receive_UserId, State_Msg, Subject_Msg,
Content_Msg, Post_Date,Is_Open
FROM ReportMsg
where State_Msg=1 and Business_Id=0
and 1=1 and
Post_Date between Dateadd(yy,datediff(yy,0,getdate()),0)
and Dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1, 0))
order by Post_Date desc
楼主看看是不是想要的结果,不知道字段类型不好说,因为:where State_Msg=1 and Business_Id=0中,如果State_Msg,Business_Id是varchar类型的,那么1 和 0 就的加单引号,楼主在拼sql语句的时候得手动拼上单引号。
不知道这样写够不够明白。本回答被提问者采纳

以上是关于sqlserver问题的主要内容,如果未能解决你的问题,请参考以下文章

java数据库连接sqlserver问题

sqlserver 存储过程问题

Sqlserver里主键插入的问题?

sqlserver日期转换问题

sqlserver存储过程语法错误的问题

vs2017中显示检测到不兼容的sqlserver版本