-
常用到的几个有用的sql命令,经常碰到这样的问题:当项目已经部署后我们会进行一些脚本的更新,有时候我们写的存储过程视图或者函数,如果我们没有在前面加上dbo.那么更新到数据库的时候就会出现admin.sp_spName,admin.vw_vwName,这样一定会导致你的程序出错,那么什么原因引起的呢?就是你当前进入的数据库的帐号不是sa,而是给你分配的有dbo权限的admin所以才会出现这样的问题,并且会导致你的数据空中会有重复的存储过程,视图或者函数,这样程序调用的时候就会出现冲突引起错误,这里提供下面这几个函数来进行处理
Exec sp_changeobjectowner 'nmp.Vw_ContentForAccessList', 'dbo'
--有数据名没有数据库用户,可以使用以下语句加上数据库登录名
Exec sp_change_users_login 'UPDATE_ONE',没有登录名的数据库用户,'新的登录名'
跨数据库访问的一些SQL语句:
select a.* from openrowset('SQLOLEDB','服务器地址';'用户名';'密码',数据库名称.dbo.tbUser) a
Select a.* from OPENROWSET('MSDASQL','DRIVER={SQL Server};
SERVER=服务器地址;UID=用户名;PWD=密码',数据库名称.dbo.tbUser) a
select a.* from openrowset('SQLOLEDB','服务器地址';'用户名';'密码',数据库名称.dbo.tbUser) a
OPENROWSET('SQLOLEDB','服务器地址,端口';'用户名';'密码', 'SQL语句')
--使用Jet 的 Microsoft OLE DB:
OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'c:\test.mdb';'admin';'pwd', Orders
ID name
1 aa
2 bb
3 cc
4 dd
5 aa
6 ac
7 cc
8 df
第一个语句删除重复的数据。但想在重复的数据中只保留一条记录
SQL语句为
delete from test where id not in( select min([id ]) from test group by [name])
第二个语句要求随机获得5条数据,SQL语句为
select top 5 * from test order by newid()
sql 中将一列中的多行数据转换成一个字符串的函数:
ALTER FUNCTION [dbo].[fn_GetDepartmentNamesByTemplateCode]
(
@Code nvarchar(50)
)
RETURNS nvarchar(2048)
AS
BEGIN
declare @DepartmentNames nvarchar(2048)
set @DepartmentNames = ''
select @DepartmentNames = @DepartmentNames+',' + [DpName] from TemplateInDepatment a INNER JOIN depts b ON a.OUID=b.dpId Where a.TemplateCode=@Code
if(@DepartmentNames<>'')
Set @DepartmentNames=right(@DepartmentNames,len(@DepartmentNames)-1)
--print @DepartmentNames
return @DepartmentNames