201211

<?xml version="1.0" encoding="utf-8"?><Snippet><Entry KeyWord="index,primary key,CONSTRAINT(2011)" ActionWord=" " Tipo="1" Flag="0">USE [Warehouse]
GO

/* BYDBA 1 不建议使用联合主键,而是用自增列配合"创建唯一约束"或"创建唯一索引"
    --创建唯一约束的方法
    CREATE TABLE tb_test
    (
        id    INT IDENTITY    NOT NULL,
        UniqueASNNumber    CHAR(10)    NOT NULL,
        PackageLabel    CHAR(12)    NOT NULL constraint DF_tb_PackageLabel default(''),    
        CONSTRAINT PK_TABLE PRIMARY KEY (id),
        CONSTRAINT UK_TABLE UNIQUE (PackageLabel, UniqueASNNumber)
    )

    --创建唯一索引的方法
    CREATE UNIQUE NONCLUSTERED INDEX [IXU_TABLE_CODE1_CODE2] ON dbo.[TABLE]
    (
        [Code1],[Code2]
    )WITH (FILLFACTOR=90) ON [PRIMARY]
*/

--覆盖索引
create nonclustered index ix_itemRateOfCustomer_item_CountryCode_CompanyCode on  itemRateOfCustomer
(item) include(CountryCode,CompanyCode) WITH (FILLFACTOR=90) ON [PRIMARY]



--添加主键----------
ALTER TABLE 表名
ADD CONSTRAINT [PK_表名] PRIMARY KEY CLUSTERED(ID,Name)

--添加主键已经其他属性
ALTER TABLE ttt WITH NOCHECK
ADD CONSTRAINT PK_TransactionHistoryArchive_TransactionID PRIMARY KEY CLUSTERED (id)
WITH (FILLFACTOR = 75, ONLINE = ON, PAD_INDEX = ON);

---删除主键--------------

ALTER TABLE DropShipPickingShortage
Drop CONSTRAINT PK_DropShipPickingShortage

---创建索引
CREATE NONCLUSTERED INDEX IX_TABLE1_FIELD ON dbo.TABLE1
(
    [FIELD] ASC
)WITH (FILLFACTOR = 90) ON [PRIMARY]

--删除索引----------------
IF EXISTS (
SELECT 1 FROM sys.indexes WITH(NOLOCK)
WHERE object_id = OBJECT_ID(N'[dbo].[arinvt01]') AND [name] = N'IX_arinvt01_filed'
)
DROP INDEX IX_arinvt01_filed ON [dbo].[arinvt01] WITH ( ONLINE = OFF )




--删除列----------------
alter table  ItemXmlProperties
drop column TransactionNumber



--删除统计信息-----------------
IF EXISTS (
        SELECT 1
        FROM sys.stats WITH(NOLOCK)
        WHERE object_id = OBJECT_ID(N'[dbo].[arinvt01]')
            AND [name] = N'Statistic_BEG_ACC')

DROP STATISTICS [dbo].[Arinvt01].[Statistic_BEG_ACC]


---添加默认属性
ALTER TABLE [dbo].[IM_ItemPriceChangeBuffer]
ADD CONSTRAINT DF_IM_ItemPriceChangeBuffer_PromotionDescription
DEFAULT ('') FOR PromotionDescription
GO

---添加默认属性跟新现有行
ALTER TABLE dbo.doc_exf
ADD AddDate smalldatetime NULL
CONSTRAINT DF_doc_exf_AddDate
DEFAULT GETDATE() WITH VALUES ;



-----删除默认属性
if exists(
select 1 from sys.default_constraints
where parent_object_id =object_id('IM_Warranty')
and name='DF_IM_Warranty_WarrantyName'
)
ALTER TABLE IM_Warranty DROP CONSTRAINT DF_Jobs_JobId






------添加新列,约束
ALTER TABLE dbo.doc_exc
ADD column_b VARCHAR(20) NULL
CONSTRAINT exb_unique UNIQUE ;




---添加约束,将使用WITH NOCHECK 以避免根据现有行验证该约束,从而允许添加该约束。
ALTER TABLE dbo.doc_exd
WITH NOCHECK
ADD CONSTRAINT exd_check CHECK (column_a &gt; 1) ;



----更改列的排序规则
ALTER TABLE T3
ALTER COLUMN C2 varchar(50) COLLATE Latin1_General_BIN
GO


------添加外键---------
ALTER TABLE Person.ContactBackup
ADD CONSTRAINT FK_ContactBacup_Contact FOREIGN KEY (ContactID)
REFERENCES Person.Person (BusinessEntityID) ;





--配置表的更改跟踪

--下面的示例启用AdventureWorks2008R2 数据库中Person.Person 表的更改跟踪。

USE AdventureWorks2008R2;
ALTER TABLE Person.Person
ENABLE CHANGE_TRACKING;



--下面的示例启用更改跟踪,并启用在进行某项更改期间会进行更新的列的跟踪。

USE AdventureWorks2008R2;
ALTER TABLE Person.Person
ENABLE CHANGE_TRACKING
WITH (TRACK_COLUMNS_UPDATED = ON)



--下面的示例禁用AdventureWorks2008R2 数据库中Person.Person 表的更改跟踪。

USE AdventureWorks2008R2;
ALTER TABLE Person.Person
DISABLE CHANGE_TRACKING;




-----下面的三个语句添加名为CS 的列集,然后将列C2 和C3 修改为SPARSE。
ALTER TABLE T2
ADD CS XML COLUMN_SET FOR ALL_SPARSE_COLUMNS ;
GO

ALTER TABLE T2
ALTER COLUMN C2 ADD SPARSE ;
GO

ALTER TABLE T2
ALTER COLUMN C3 ADD SPARSE ;
GO


--------------------------禁用约束,启用约束-------------------
CREATE TABLE dbo.cnst_example
(id INT NOT NULL,
 name VARCHAR(10) NOT NULL,
 salary MONEY NOT NULL
    CONSTRAINT salary_cap CHECK (salary &lt; 100000)
);

-- Valid inserts
INSERT INTO dbo.cnst_example VALUES (1,'Joe Brown',65000);
INSERT INTO dbo.cnst_example VALUES (2,'Mary Smith',75000);

-- This insert violates the constraint.
INSERT INTO dbo.cnst_example VALUES (3,'Pat Jones',105000);

-- Disable the constraint and try again.
ALTER TABLE dbo.cnst_example NOCHECK CONSTRAINT salary_cap;
INSERT INTO dbo.cnst_example VALUES (3,'Pat Jones',105000);

-- Re-enable the constraint and try another insert; this will fail.
ALTER TABLE dbo.cnst_example CHECK CONSTRAINT salary_cap;
INSERT INTO dbo.cnst_example VALUES (4,'Eric James',110000) ;






</Entry><Entry KeyWord="Query Job&#xD;&#xA;(2011)" ActionWord=" " Tipo="1" Flag="0">--CMD Query Job
use msdb
go

select * from dbo.sysjobs a
inner join dbo.sysjobsteps b
on a.job_id = b.job_id
where b.command like '%UP_EC_InsertRMAExtendedWarrantyItem%'








--CMD Query Job
use msdb
go

sp_help_jobschedule @job_id =''



</Entry><Entry KeyWord="_MarkDelete sp_rename(2011)" ActionWord=" " Tipo="1" Flag="0"> _MarkDelete_20090311_UP_SPNAME




---rename 主键
EXEC sp_rename '[ItemPriceSetting].PK_tmp_ItemPriceSetting','PK_ItemPriceSetting','index'



EXEC sp_rename '[tmp_ItemPriceSetting]','ItemPriceSetting'</Entry><Entry KeyWord="Query Replication(2011)" ActionWord="#queryRep" Tipo="1" Flag="0">use distribution
go

select *,(select drop_publication as [*] FOR XML PATH ('root'),TYPE ) from
(
SELECT
    DISTINCT p.publication
   ,ss.name AS subscriber
   ,p.publisher_db
   ,a.article
   ,s.Subscriber_DB --,ss.server_id,P.*
    ,CHAR(10)+CHAR(10)+
'use '+p.publisher_db+CHAR(10)+' go'+CHAR(10)+
'EXEC sp_Dropsubscription @publication = N'''+p.publication+''''+CHAR(10)+
    ',@subscriber = N'''+ss.name+''''+CHAR(10)+
    ',@destination_db = N'''+Subscriber_DB+''''+CHAR(10)+
    ',@article = N'''+a.article+''''+CHAR(10)+
'EXEC sp_DropArticle @publication = N'''+p.publication+''''+CHAR(10)+
    ',@article = N'''+a.article+''''+CHAR(10)+CHAR(10)
 as drop_publication

FROM dbo.MSsubscriptions AS s WITH (NOLOCK)
INNER JOIN sys.servers AS ss WITH (NOLOCK)
    ON s.subscriber_id =ss.server_id
INNER JOIN dbo.MSpublications AS p WITH (NOLOCK)
    ON p.publisher_id=s.publisher_id
    AND p.publisher_db=s.publisher_db
    AND p.publication_id = s.publication_id
INNER JOIN dbo.MSarticles AS a
    ON p.publisher_id=a.publisher_id
    AND p.publisher_db=a.publisher_db
    AND p.publication_id = a.publication_id
WHERE
    a.article ='SAPSD_MKP_InventoryStorageFee'
) C</Entry><Entry KeyWord="ipaddress(2011)" ActionWord=" " Tipo="1" Flag="0">

select distinct @@SERVERNAME server,local_net_address as ip,local_tcp_port sqlport from sys.dm_exec_connections
where net_transport='tcp' and protocol_type='tsql'

SELECT @@SERVERNAME, name,port FROM master.sys.tcp_endpoints
where [type]=3 and type_desc='SERVICE_BROKER'
</Entry><Entry KeyWord="动态 sp_executesql (2011)" ActionWord=" " Tipo="1" Flag="0">declare @num int,@sql nvarchar(4000),@count int;
set @num=245;
set @sql=N'select @count1=count(*) from dbo.tb_ErrorLog where error_number=@num1';
exec sp_executesql @sql, N'@num1 int,@count1 int output', @num1=@num,@count1=@count output

select @count






--- like 传参数

declare @sql nvarchar(4000)
set @sql='select * from tb where name like @name'

exec sp_executesql @sql ,N'@name varchar(50)',@name='%fs%'

</Entry><Entry KeyWord="job disable&amp;amp;rename(2011)" ActionWord=" " Tipo="1" Flag="0">
use msdb
go

EXEC msdb..sp_update_job @job_name = N'job',
 @new_name = N'MarkDelete_20100923_job',@enabled=0
</Entry><Entry KeyWord="查看hosts 文件(2011)" ActionWord=" " Tipo="1" Flag="0">declare @t table
(
id int identity(1,1)
,text varchar(max)
)


Insert into @t
EXEC xp_cmdshell 'type C:\Windows\System32\Drivers\etc\hosts'

select *
from @t
where Text not like '#%'</Entry><Entry KeyWord="user create hash password login(2011)" ActionWord=" " Tipo="1" Flag="0">--寻找用户的hashword
SELECT password_hash, *
FROM sys.sql_logins L WITH(NOLOCK)
where name='edidbo'

--根据hashword 创建用户
CREATE LOGIN [EDIDbo]
                WITH PASSWORD = 0x0100352AC183ADC9C0CEDA851011598D01ADC088449D8D4309C9
                HASHED, SID = 0x26D34F54B8DE3446ABB74D4AE058FBD3,
              CHECK_POLICY = OFF,
              CHECK_EXPIRATION = OFF



</Entry><Entry KeyWord="bcp out(2011)" ActionWord=" " Tipo="1" Flag="0">BCP "ItemMaintainNewegg.dbo.arinvt01" OUT "arinvt01" /N /U RepDbo /P Rep@Dbo /S "S7QSQL07\D2WHP01"

pause</Entry><Entry KeyWord="bcp in(2011)" ActionWord=" " Tipo="1" Flag="0">BCP "ITEMMAINTAIN.dbo.arinvt01" In "arinvt01" /N /E /q /k /U RepDbo /P Rep@Dbo /b 50000 /S "S7QSQL01\ABS_SQL"

pause</Entry><Entry KeyWord="replication 同步 条件   查询(2011)" ActionWord=" " Tipo="1" Flag="0">

use DBAMonitor
GO
--EXEC ReplicationInfo.P_ReplicationInfo
--    @search_object = N'dropshipmaster'
--GO

select   *
from ReplicationInfo.v_Info
where article_name IN( 'NewEgg_SOMaster','Newegg_SoTransaction')
    --and publisher_server = 'D2whp01'

--select * from sys.views
--where schema_name(schema_id) = 'ReplicationInfo'


---查询同步历史条件
select   *
from ReplicationInfo.tb_Info
where article_name IN( 'NewEgg_SOMaster','Newegg_SoTransaction')
and row_filter is not null
    --and publisher_server = 'D2whp01'</Entry><Entry KeyWord="replication 更新订阅状态(2011)" ActionWord=" " Tipo="1" Flag="0">--Publisher
/*Replication Error
1.The subscription(s) have been marked inactive and must be reinitialized.
NoSync subscriptions will need to be dropped and recreated.
*/
set nocount on

use distribution
go
select *
from dbo.MSsubscriptions with (NOLOCK)
where status=0

/*
update distribution.dbo.MSsubscriptions
set status = 0
where publisher_id = 0
and publisher_db = 'imk'
and publication_id =68
and subscriber_id = 12
and subscriber_db = 'imk'
*/
SET NOCOUNT ON
declare @sql nvarchar(max)
set @sql=N''
select @sql=@sql+N'USE distribution'+char(10)+N'GO'+char(10)
                +N'update distribution.dbo.MSsubscriptions'
                +char(10)+N'set status = 2'
                +char(10)+N'where publisher_id='+CAST(publisher_id AS varchar)
                +char(10)+N'and publisher_db = '''+publisher_db+''''
                +char(10)+N'and publication_id ='+CAST(publication_id AS varchar)
                +char(10)+N'and subscriber_id = '+CAST(subscriber_id AS varchar)
                +char(10)+N'and subscriber_db = '''+subscriber_db+''''
                +char(10)+N'GO'+char(10)
from distribution.dbo.MSsubscriptions with (NOLOCK)
where status=0

print @sql--(Copy出来执行就是了)


/*
The process could not connect to Subscriber 'XXXX'

1.network issue:Telnet
2.User and password are wrong
修改Subscribers property中的用户和密码
*/</Entry><Entry KeyWord="replication job(2011)" ActionWord=" " Tipo="1" Flag="0">EXEC msdb.dbo.sp_stop_job @job_name = N'S7QSQL05\S7EDIDB01-MKTPLS-Rp_MKTPLS_EHISSQL.MKT-S7QSQL04\EHISSQL-32'    
EXEC msdb.dbo.sp_start_job @job_name = N'S7QSQL05\S7EDIDB01-MKTPLS-Rp_MKTPLS_EHISSQL.MKT-S7QSQL04\EHISSQL-32'</Entry><Entry KeyWord="TRIGGER  (2011)" ActionWord=" " Tipo="1" Flag="0">/****** Object:  DdlTrigger [TR_SRV_DBA_DDL_ALL]    Script Date: 12/18/2010 19:23:16 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO


CREATE TRIGGER [TR_SRV_DBA_DDL_ALL]
ON ALL SERVER
WITH
    EXECUTE AS N'sa'
FOR
    DDL_SERVER_LEVEL_EVENTS,
    DDL_DATABASE_LEVEL_EVENTS
AS
SET NOCOUNT ON;
SET ANSI_PADDING ON;
INSERT temptable.dbo.tb_DBA_DDL_All_master(
    event_data
)
OUTPUT
    inserted.id as id,

    inserted.event_data.value(N'(/EVENT_INSTANCE/EventType/text())[1]', N'nvarchar(260)') as event_type,
    inserted.event_data.value(N'(/EVENT_INSTANCE/PostTime/text())[1]', N'datetime') as post_time,
    inserted.event_data.value(N'(/EVENT_INSTANCE/LoginName/text())[1]', N'nvarchar(260)') as login_name,

    inserted.event_data.value(N'(/EVENT_INSTANCE/ServerName/text())[1]', N'nvarchar(260)') as server_name,
    inserted.event_data.value(N'(/EVENT_INSTANCE/DatabaseName/text())[1]', N'nvarchar(260)') as database_name,
    inserted.event_data.value(N'(/EVENT_INSTANCE/SchemaName/text())[1]', N'nvarchar(260)') as schema_name,
    inserted.event_data.value(N'(/EVENT_INSTANCE/ObjectType/text())[1]', N'nvarchar(260)') as object_type,
    inserted.event_data.value(N'(/EVENT_INSTANCE/ObjectName/text())[1]', N'nvarchar(260)') as object_name,

    inserted.event_data.value(N'(/EVENT_INSTANCE/TSQLCommand/CommandText/text())[1]', N'nvarchar(max)') as command
    INTO temptable.dbo.tb_DBA_DDL_All_detial(
        master_id,
        event_type, post_time, login_name,
        server_name, database_name, schema_name, object_type, object_name,
        command
    )        
VALUES(
    EVENTDATA()
);

GO

SET ANSI_NULLS OFF
GO

SET QUOTED_IDENTIFIER OFF
GO

ENABLE TRIGGER [TR_SRV_DBA_DDL_ALL] ON ALL SERVER
GO


</Entry><Entry KeyWord="user与role的对应关系(2011)" ActionWord=" " Tipo="1" Flag="0">
declare @RoleName varchar(50), @UserName varchar(50), @CMD varchar(1000)
declare @databaseName varchar(50)

set @databaseName='test'
set @UserName = 'yind'

create Table #UserRoles(DatabaseName varchar(50),Role varchar(50))

create table #RoleMember
(DBRole varchar(100),
MemberName varchar(100),
MemberSid varbinary(2048))


set @CMD = 'use ?

truncate table #RoleMember

insert into #RoleMember
exec sp_helprolemember

insert into #UserRoles
(DatabaseName, Role)
select db_name(), dbRole
from #RoleMember
where MemberName = ''' + @UserName + ''''

exec sp_MSForEachDB @CMD

select * from #UserRoles
where @databaseName='' or DatabaseName=@databaseName

drop table #UserRoles
drop table #RoleMember</Entry><Entry KeyWord="select 查询只存在一种数据(2011)" ActionWord=" " Tipo="1" Flag="0">
use test
go

DECLARE @ItemList TABLE(
 TransactionNumber INT IDENTITY(1,1) PRIMARY KEY,
 ItemNumber CHAR(25)
)
INSERT INTO @ItemList(ItemNumber) VALUES ('GC-000-001')
INSERT INTO @ItemList(ItemNumber) VALUES ('GC-000-003')

if exists
(
    select top 1 1 from
    (
    select COUNT(*) total ,sum(case when ItemNumber='GC-000-001' then 1 end) item from @ItemList
    )c
    where total=item and total&lt;&gt;0
)
SELECT 1
ELSE
SELECT 0


IF  EXISTS
(
SELECT TOP 1 1 FROM @ItemList t WHERE ItemNumber = 'GC-000-001'
and not exists
( select top 1 1 from @ItemList c where c.ItemNumber&lt;&gt;'GC-000-001')
)
SELECT 1
ELSE
SELECT 0
</Entry><Entry KeyWord="删除identity列(2011)" ActionWord=" " Tipo="1" Flag="0">USE NewEgg
GO

ALTER TABLE [SerialNumber]
switch to [tmp_SerialNumber]

IF EXISTS(SELECT TOP 1 1 FROM [tmp_SerialNumber] WITH (NOLOCK))
 DROP TABLE [SerialNumber]
ELSE
BEGIN
 IF EXISTS(SELECT TOP 1 1 FROM [SerialNumber] WITH (NOLOCK))
  RAISERROR('switch failed',16,1)
END

EXEC sp_rename '[tmp_SerialNumber]','SerialNumber'

EXEC sp_rename '[SerialNumber].PK_tmp_SerialNumber','PK_SerialNumber','index'
GO


</Entry><Entry KeyWord="创建删除fulltext (2011)" ActionWord=" " Tipo="1" Flag="0">

USE [eCommerce2005]
GO
--create catalog
CREATE FULLTEXT CATALOG [ftTestDBA]WITH ACCENT_SENSITIVITY = ON
AUTHORIZATION [dbo]

---创建全文索引
CREATE FULLTEXT INDEX ON [dbo].EC_AllocateInventory_Log--表
(
Memo LANGUAGE [English], --col
InUser LANGUAGE [English]--col
)
KEY INDEX [PK_EC_AllocateInventory_Log]--主键,唯一索引
ON ([ftTestDBA], --fulltext catalog
FILEGROUP [PRIMARY])
WITH (CHANGE_TRACKING = AUTO, STOPLIST = SYSTEM)



----删除全文索引

--DROP FULLTEXT INDEX ON EC_AllocateInventory_Log
--DROP FULLTEXT CATALOG [ftTestDBA]








</Entry><Entry KeyWord="注册表regedit(2011)" ActionWord=" " Tipo="1" Flag="0">Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\ConnectTo]
"DSQUERY"="DBNETLIB"

"S1DSQL01\\ABS_SQL"="DBMSSOCN,10.1.25.21,1433"
"S1DSQL01\\S7EIM01"="DBMSSOCN,10.1.25.21,41433"
"S1DSQL02\\S5RMADB01"="DBMSSOCN,10.1.25.22,1433"
"S1DSQL02\\D2HIS01"="DBMSSOCN,10.1.25.22,41433"
"S1DSQL03\\NEWSQL2"="DBMSSOCN,10.1.25.23,1433"
"S1DSQL04\\EHISSQL"="DBMSSOCN,10.1.25.24,1433"
"S1DSQL05\\APPSQL"="DBMSSOCN,10.1.25.25,41433"
"S7DSQL09\\S7FRA01"="DBMSSOCN,10.1.25.29,1433"
"S7DSQL09\\S7HISDB01"="DBMSSOCN,10.1.25.29,41433"


[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\MSSQLServer\Client\ConnectTo]
"S1DSQL01\\ABS_SQL"="DBMSSOCN,10.1.25.21,1433"
"S1DSQL01\\S7EIM01"="DBMSSOCN,10.1.25.21,41433"
"S1DSQL02\\S5RMADB01"="DBMSSOCN,10.1.25.22,1433"
"S1DSQL02\\D2HIS01"="DBMSSOCN,10.1.25.22,41433"
"S1DSQL03\\NEWSQL2"="DBMSSOCN,10.1.25.23,1433"
"S1DSQL04\\EHISSQL"="DBMSSOCN,10.1.25.24,1433"
"S1DSQL05\\APPSQL"="DBMSSOCN,10.1.25.25,41433"
"S7DSQL09\\S7FRA01"="DBMSSOCN,10.1.25.29,1433"
"S7DSQL09\\S7HISDB01"="DBMSSOCN,10.1.25.29,41433"</Entry><Entry KeyWord="replication datacache(2011)" ActionWord=" " Tipo="1" Flag="0">
--ehissql

USE NCustomer
GO

SELECT
      *
FROM dbo.sysarticles ART WITH(NOLOCK)
WHERE objid = OBJECT_ID(N'Newegg_Customer')
      AND EXISTS(
            SELECT 1
            FROM dbo.syssubscriptions SUB WITH(NOLOCK)
            WHERE ART.artid = SUB.artid
                  AND SUB.srvid &lt;&gt; -1 AND dest_db &lt;&gt; N'virtual'
                  AND   SUB.srvname = @@SERVERNAME
                  AND SUB.dest_db = 'Datacache'
      )


use DataCache
go

sp_helptext  [sp_MSins__NCustomer_DBONewegg_Customer]

sp_helptext [sp_MSupd_NCustomer_DBONewegg_Customer]</Entry><Entry KeyWord="dts 导入identity数据(2011)" ActionWord=" " Tipo="1" Flag="0">dts可以导入identity数据,需要选择目的表的时候,设置 edit mappings.
设置 enable identity insert 为on






dts 可以只导入一些列,非所用列

</Entry><Entry KeyWord="bcp 导入identity列(2011)" ActionWord=" " Tipo="1" Flag="0">BCP in,

 加-E可以显式指定IDENTITY列值

不加-E。自增列累加递增</Entry><Entry KeyWord="sql 导出excel(2011)" ActionWord=" " Tipo="1" Flag="0">
1、在SQL SERVER里查询Excel数据:
-- ======================================================

SELECT *
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:\book1.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...[Sheet1$]


下面是个查询的示例,它通过用于 Jet 的 OLE DB 提供程序查询 Excel 电子表格。

SELECT *
FROM OpenDataSource ( 'Microsoft.Jet.OLEDB.4.0',
  'Data Source="c:\Finance\account.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions


-------------------------------------------------------------------------------------------------

2、将Excel的数据导入SQL server :
-- ======================================================

SELECT * into newtable
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
  'Data Source="c:\book1.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...[Sheet1$]


实例:

SELECT * into newtable
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
  'Data Source="c:\Finance\account.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions


-------------------------------------------------------------------------------------------------

3、将SQL SERVER中查询到的数据导成一个Excel文件
-- ======================================================
T-SQL代码:

EXEC master..xp_cmdshell 'bcp 库名.dbo.表名out c:\Temp.xls -c -q -S"servername" -U"sa" -P""'


参数:S 是SQL服务器名;U是用户;P是密码
说明:还可以导出文本文件等多种格式
实例:

EXEC master..xp_cmdshell 'bcp saletesttmp.dbo.CusAccount out c:\temp1.xls -c -q -S"pmserver" -U"sa" -P"sa"'
EXEC master..xp_cmdshell 'bcp "SELECT au_fname, au_lname FROM pubs..authors ORDER BY au_lname" queryout C:\ authors.xls -c -Sservername -Usa -Ppassword'


在VB6中应用ADO导出EXCEL文件代码:
Dim cn  As New ADODB.Connection
cn.open "Driver={SQL Server};Server=WEBSVR;DataBase=WebMis;UID=sa;WD=123;"
cn.execute "master..xp_cmdshell 'bcp "SELECT col1, col2 FROM 库名.dbo.表名" queryout E:\DT.xls -c -Sservername -Usa -Ppassword'"
------------------------------------------------------------------------------------------------

4、在SQL SERVER里往Excel插入数据:
-- ======================================================

insert into OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:\Temp.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...table1 (A1,A2,A3) values (1,2,3)



T-SQL代码:

INSERT INTO
OPENDATASOURCE('Microsoft.JET.OLEDB.4.0',
'Extended Properties=Excel 8.0;Data source=C:\training\inventur.xls')...[Filiale1$]
(bestand, produkt) VALUES (20, 'Test')

insert into openrowset('Microsoft.Jet.OLEDB.4.0','EXCEL 8.0;HDR=YES;User id=admin;Password=;IMEX=1;
DATABASE=D:\Roy.xls', sheet1$)--(ID,Name)
select 2,'b'

insert into OPENROWSET('MICROSOFT.JET.OLEDB.4.0','Excel 8.0;HDR=YES;DATABASE=D:\Roy.xls',sheet1$)(ID,Name)
select 2,'b'

</Entry><Entry KeyWord="汇编 move(2011)" ActionWord=" " Tipo="1" Flag="0">mov xxx, dword ptr ds:[xxxxxxxx]            dword 双字取DS段[XXXXXXXX] 中的数据,给出了段寄存器
mov xxx, dword ptr [xxxxxxxx]               没有给出段寄存器,取默认段
mov xxx, [xxxxxxxx]                         直接寻址
</Entry><Entry KeyWord="汇编 mov ecx(2011)" ActionWord=" " Tipo="1" Flag="0">mov [ECX+EAX*4],edx


因为[ECX+EAX*4]就相当于一个数组里的某个下标值变量.
例如i是个数组,可以理解成这样 i[eax] = edx

这是一个数组 通常情况是在找背包物品基址的时候才出现的,
如金创药当前的物品下表为(也就是第一个格子)  ,
 那么eax就等于,也就是说,[ECX+0*4]  所以一般只要搜索ECX的值就行了,
这么说只是方便楼主理解吧!</Entry><Entry KeyWord="汇编 寄存器(2011)" ActionWord=" " Tipo="1" Flag="0">在8086里面,16位通用寄存器为ax,bx,cx,dx,
在80386里,寄存器为32位,对应8086,即为eax,ebx,ecx,edx
dword ptr fs:[0] 表示fs*16+0处的一个双字
另外,div ebx 即 (edx,eax)/ebx
这里显然应为mov edx,0 ,或者直接用CDQ对cdx进行扩展,CDQ 双字扩展. (把EAX中的字的符号扩展到EDX中去)

整个代码的意思就是:
先将00501a32入栈,再将fs*16+0处的一个双字入栈,再做除法
(edx,eax)/ebx

附:关于寄存器:
计算机寄存器分类简介:
32位CPU所含有的寄存器有:
4个数据寄存器(EAX、EBX、ECX和EDX)
2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP)
6个段寄存器(ES、CS、SS、DS、FS和GS)
1个指令指针寄存器(EIP) 1个标志寄存器(EFlags)
1、数据寄存器
数据寄存器主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间。
32位CPU有4个32位的通用寄存器EAX、EBX、ECX和EDX。
对低16位数据的存取,不会影响高16位的数据。
这些低16位寄存器分别命名为:AX、BX、CX和DX,它和先前的CPU中的寄存器相一致。
4个16位寄存器又可分割成8个独立的8位寄存器(AX:AH-AL、BX:BH-BL、CX:CH-CL、DX:DH-DL),每个寄存器都有自己的名称,可独立存取。
程序员可利用数据寄存器的这种“可分可合”的特性,灵活地处理字/字节的信息。
寄存器EAX通常称为累加器(Accumulator),用累加器进行的操作可能需要更少时间。可用于乘、 除、输入/输出等操作,使用频率很高;
寄存器EBX称为基地址寄存器(Base Register)。它可作为存储器指针来使用;
寄存器ECX称为计数寄存器(Count Register)。
在循环和字符串操作时,要用它来控制循环次数;在位操作中,当移多位时,要用CL来指明移位的位数;
寄存器EDX称为数据寄存器(Data Register)。在进行乘、除运算时,它可作为默认的操作数参与运算,也可用于存放I/O的端口地址。
在16位CPU中,AX、BX、CX和DX不能作为基址和变址寄存器来存放存储单元的地址,
在32位CPU中,其32位寄存器EAX、EBX、ECX和EDX不仅可传送数据、暂存数据保存算术逻辑运算结果,
而且也可作为指针寄存器,所以,这些32位寄存器更具有通用性。
2、变址寄存器
32位CPU有2个32位通用寄存器ESI和EDI。
其低16位对应先前CPU中的SI和DI,对低16位数据的存取,不影响高16位的数据。
寄存器ESI、EDI、SI和DI称为变址寄存器(Index Register),它们主要用于存放存储单元在段内的偏移量,
用它们可实现多种存储器操作数的寻址方式,为以不同的地址形式访问存储单元提供方便。
变址寄存器不可分割成8位寄存器。作为通用寄存器,也可存储算术逻辑运算的操作数和运算结果。
它们可作一般的存储器指针使用。在字符串操作指令的执行过程中,对它们有特定的要求,而且还具有特殊的功能。
3、指针寄存器
其低16位对应先前CPU中的BP和SP,对低16位数据的存取,不影响高16位的数据。
32位CPU有2个32位通用寄存器EBP和ESP。
它们主要用于访问堆栈内的存储单元,并且规定:
EBP为基指针(Base Pointer)寄存器,用它可直接存取堆栈中的数据;
ESP为堆栈指针(Stack Pointer)寄存器,用它只可访问栈顶。
寄存器EBP、ESP、BP和SP称为指针寄存器(Pointer Register),主要用于存放堆栈内存储单元的偏移量,
用它们可实现多种存储器操作数的寻址方式,为以不同的地址形式访问存储单元提供方便。
指针寄存器不可分割成8位寄存器。作为通用寄存器,也可存储算术逻辑运算的操作数和运算结果。
4、段寄存器
段寄存器是根据内存分段的管理模式而设置的。内存单元的物理地址由段寄存器的值和一个偏移量组合而成
的,这样可用两个较少位数的值组合成一个可访问较大物理空间的内存地址。
CPU内部的段寄存器:
ECS——代码段寄存器(Code Segment Register),其值为代码段的段值;
EDS——数据段寄存器(Data Segment Register),其值为数据段的段值;
EES——附加段寄存器(Extra Segment Register),其值为附加数据段的段值;
ESS——堆栈段寄存器(Stack Segment Register),其值为堆栈段的段值;
EFS——附加段寄存器(Extra Segment Register),其值为附加数据段的段值;
EGS——附加段寄存器(Extra Segment Register),其值为附加数据段的段值。
在16位CPU系统中,它只有4个段寄存器,所以,程序在任何时刻至多有4个正在使用的段可直接访问;在32位
微机系统中,它有6个段寄存器,所以,在此环境下开发的程序最多可同时访问6个段。
32位CPU有两个不同的工作方式:实方式和保护方式。在每种方式下,段寄存器的作用是不同的。有关规定简
单描述如下:
实方式: 前4个段寄存器CS、DS、ES和SS与先前CPU中的所对应的段寄存器的含义完全一致,内存单元的逻辑
地址仍为“段值:偏移量”的形式。为访问某内存段内的数据,必须使用该段寄存器和存储单元的偏移量。
保护方式: 在此方式下,情况要复杂得多,装入段寄存器的不再是段值,而是称为“选择子”(Selector)的某个值。。
5、指令指针寄存器
32位CPU把指令指针扩展到32位,并记作EIP,EIP的低16位与先前CPU中的IP作用相同。
指令指针EIP、IP(Instruction Pointer)是存放下次将要执行的指令在代码段的偏移量。
在具有预取指令功能的系统中,下次要执行的指令通常已被预取到指令队列中,除非发生转移情况。
所以,在理解它们的功能时,不考虑存在指令队列的情况。
6、标志寄存器
一、运算结果标志位
1、进位标志CF(Carry Flag)
进位标志CF主要用来反映运算是否产生进位或借位。如果运算结果的最高位产生了一个进位或借位,那么,其值为1,否则其值为0。
使用该标志位的情况有:多字(字节)数的加减运算,无符号数的大小比较运算,移位操作,字(字节)之间移位,专门改变CF值的指令等。
2、奇偶标志PF(Parity Flag)
奇偶标志PF用于反映运算结果中“1”的个数的奇偶性。如果“1”的个数为偶数,则PF的值为1,否则其值为0。
利用PF可进行奇偶校验检查,或产生奇偶校验位。在数据传送过程中,为了提供传送的可靠性,如果采用奇偶校验的方法,就可使用该标志位。
3、辅助进位标志AF(Auxiliary Carry Flag)
在发生下列情况时,辅助进位标志AF的值被置为1,否则其值为0:
(1)、在字操作时,发生低字节向高字节进位或借位时;
(2)、在字节操作时,发生低4位向高4位进位或借位时。
对以上6个运算结果标志位,在一般编程情况下,标志位CF、ZF、SF和OF的使用频率较高,而标志位PF和AF的使用频率较低。
4、零标志ZF(Zero Flag)
零标志ZF用来反映运算结果是否为0。如果运算结果为0,则其值为1,否则其值为0。在判断运算结果是否为0时,可使用此标志位。
5、符号标志SF(Sign Flag)
符号标志SF用来反映运算结果的符号位,它与运算结果的最高位相同。在微机系统中,有符号数采用码表示法,所以,SF也就反映运算结果的正负号。运算结果为正数时,SF的值为0,否则其值为1。
6、溢出标志OF(Overflow Flag)
溢出标志OF用于反映有符号数加减运算所得结果是否溢出。如果运算结果超过当前运算位数所能表示的范围,则称为溢出,OF的值被置为1,否则,OF的值被清为0。
“溢出”和“进位”是两个不同含义的概念,不要混淆。</Entry><Entry KeyWord="汇编   有符号数和无符号数探讨(2011)" ActionWord=" " Tipo="1" Flag="0">汇编补码

若是单字节
就看最高位是否为1,为1就为负数,为0为正数
对负数求单字节补码就可以知道负多少

若是双字节就看高8位字节的最高位是否为1,为1就为负数,为0为正数
对负数求双字节补码就可以知道负多少
 



-20机器中的是

10010100 负数源码
11101011 反码
11101100 补码(计算机存储)128+64+32+8+4=236


运算-20,加2 的结果

11101100
---+
00000010
------------
11101110 (如果是正数238)
取反+1=补码
10010001+1=10010010=-18




有符号数和无符号数探讨  

这个问题,要是简单的理解,是很容易的,不过要是考虑的深了,还真有些东西呢。
下面我就把这个东西尽量的扩展一点,深入一点和大家说说。
 
一、只有一个标准!
 
在汇编语言层面,声明变量的时候,没有 signed 和 unsignde 之分,汇编器统统,将你输入的整数字面量当作有符号数处理成补码存入到计算机中,只有这一个标准!汇编器不会区分有符号还是无符号然后用两个标准来处理,它统统当作有符号的!并且统统汇编成补码!也就是说,db -20 汇编后为:EC ,而 db 236 汇编后也为 EC 。这里有一个小问题,思考深入的朋友会发现,db 是分配一个字节,那么一个字节能表示的有符号整数范围是:-128 ~ +127 ,那么 db 236 超过了这一范围,怎么可以?是的,+236 的补码的确超出了一个字节的表示范围,那么拿两个字节(当然更多的字节更好了)是可以装下的,应为:00 EC,也就是说 +236的补码应该是00 EC,一个字节装不下,但是,别忘了“截断”这个概念,就是说最后汇编的结果被截断了,00 EC 是两个字节,被截断成 EC ,所以,这是个“美丽的错误”,为什么这么说?因为,当你把 236 当作无符号数时,它汇编后的结果正好也是 EC ,这下皆大欢喜了,虽然汇编器只用一个标准来处理,但是借用了“截断”这个美丽的错误后,得到的结果是符合两个标准的!也就是说,给你一个字节,你想输入有符号的数,比如 -20 那么汇编后的结果是符合有符号数的;如果你输入 236 那么你肯定当作无符号数来处理了(因为236不在一个字节能表示的有符号数的范围内啊),得到的结果是符合无符号数的。于是给大家一个错觉:汇编器有两套标准,会区分有符号和无符号,然后分别汇编。其实,你们被骗了。:-)
 
二、存在两套指令!
 
第一点说明汇编器只用一个方法把整数字面量汇编成真正的机器数。但并不是说计算机不区分有符号数和无符号数,相反,计算机对有符号和无符号数区分的十分清晰,因为计算机进行某些同样功能的处理时有两套指令作为后备,这就是分别为有符号和无符号数准备的。但是,这里要强调一点,一个数到底是有符号数还是无符号数,计算机并不知道,这是由你来决定的,当你认为你要处理的数是有符号的,那么你就用那一套处理有符号数的指令,当你认为你要处理的数是无符号的,那就用处理无符号数的那一套指令。加减法只有一套指令,因为这一套指令同时适用于有符号和无符号。下面这些指令:mul div movzx … 是处理无符号数的,而这些:imul idiv movsx … 是处理有符号的。
举例来说:
内存里有 一个字节x 为:0x EC ,一个字节 y 为:0x 02 。当把x,y当作有符号数来看时,x = -20 ,y = +2 。当作无符号数看时,x = 236 ,y = 2 。下面进行加运算,用 add 指令,得到的结果为:0x EE ,那么这个 0x EE 当作有符号数就是:-18 ,无符号数就是 238 。所以,add 一个指令可以适用有符号和无符号两种情况。(呵呵,其实为什么要补码啊,就是为了这个呗,:-))
乘法运算就不行了,必须用两套指令,有符号的情况下用imul 得到的结果是:0x FF D8 就是 -40 。无符号的情况下用 mul ,得到:0x 01 D8 就是 472 。(参看文后附录2例程)
 
三、可爱又可怕的c语言。
 
为什么又扯到 c 了?因为大多数遇到有符号还是无符号问题的朋友,都是c里面的 signed 和 unsigned 声明引起的,那为什么开头是从汇编讲起呢?因为我们现在用的c编译器,无论gcc 也好,vc6 的cl 也好,都是将c语言代码编译成汇编语言代码,然后再用汇编器汇编成机器码的。搞清楚了汇编,就相当于从根本上明白了c,而且,用机器的思维去考虑问题,必须用汇编。(我一般遇到什么奇怪的c语言的问题都是把它编译成汇编来看。)
 
C 是可爱的,因为c符合kiss 原则,对机器的抽象程度刚刚好,让我们即提高了思维层面(比汇编的机器层面人性化多了),又不至于离机器太远(像c# ,java之类就太远了)。当初K&amp;R 版的c就是高级一点的汇编……:-)
 
C又是可怕的,因为它把机器层面的所有的东西都反应了出来,像这个有没有符号的问题就是一例(java就不存在这个问题,因为它被设计成所有的整数都是有符号的)。为了说明它的可怕特举一例:
 
#include &lt;stdio.h&gt;
#include &lt;string.h&gt;
 
int main()
{
  int x = 2;
  char * str = "abcd";
  int y = (x - strlen(str) ) / 2;
   
  printf("%d\n",y);
}
 
结果应该是 -1 但是却得到:2147483647 。为什么?因为strlen的返回值,类型是size_t,也就是unsigned int ,与 int 混合计算时有符号类型被自动转换成了无符号类型,结果自然出乎意料。。。
观察编译后的代码,除法指令为 div ,意味无符号除法。
解决办法就是强制转换,变成 int y = (int)(x - strlen(str) ) / 2; 强制向有符号方向转换(编译器默认正好相反),这样一来,除法指令编译成 idiv 了。
我们知道,就是同样状态的两个内存单位,用有符号处理指令 imul ,idiv 等得到的结果,与用 无符号处理指令mul,div等得到的结果,是截然不同的!所以牵扯到有符号无符号计算的问题,特别是存在讨厌的自动转换时,要倍加小心!(这里自动转换时,无论gcc还是cl都不提示!!!)
 
为了避免这些错误,建议,凡是在运算的时候,确保你的变量都是 signed 的。
 
四、c的做法。
 
对于有符号和无符号的处理上,c语言层面做的更“人性化”一些。比如在声明变量的时候,c 有signed 和 unsigned 前缀来区别,而汇编呢,没有任何区别,把握全在你自己,比如:你想在一个字节中输入一个有符号数,那么这个数就别超过 -128 ~ +127 ,想输入无符号数,要保证数值在 0~255 之间。如果你输入了 236 ,你还要说你输入的是有符号数,那么你肯定错了,因为有符号数236至少要两个字节来存放(为00 EC),不要小看了那一个字节的00,在有符号乘法下,两个字节的00 EC 与 一个字节的EC,在与同样一个数相乘时,得到的结果是截然不同的!!!
 
我们来看下具体的列子(用vc6的cl编译器生成):
 
C语言 编译后生产的汇编语言
  ……
  char x;
  unsigned char y;
  int z;
   
  x = 3;
  y = 236;
 
  z = x*y;
  …… ……
  _x$ = -4
  _y$ = -8
  _z$ = -12
  ……
  mov BYTE PTR _x$[ebp], 3
  mov BYTE PTR _y$[ebp], 236  
 
  movsx eax, BYTE PTR _x$[ebp]
  mov ecx, DWORD PTR _y$[ebp]
  and ecx, 255
   
  imul eax, ecx
  mov DWORD PTR _z$[ebp], eax
  ……


 
我们看到,在赋值的时候(绿色部分),汇编后与本文第一条论述相同,是否有符号把握全在自己,c比汇编做的更好这一点没有得到体现,这也可以理解,因为c最终要被编译成汇编,汇编没有在变量声明时区分有无符号这一功能,自然,c也没有办法。但既然c提供了signed和unsigned声明,汇编后,肯定有代码体现这一点,表格里的红色部分就是。对有符号数x他进行了符号扩展,对无符号y进行了零扩展。这里为了举例的方便,进行了有符号数和无符号数的混合运算,实际编程中要避免这种情况。
 
(完)
 
 
附录:
 
1.计算机对有符号整数的表示只采取一套编码方式,不存在正数用原码,负数用补码这用两套编码之说,大多数计算机内部的有符号整数都是用补码,就是说无论正负,这个计算机内部只用补码来编码!!!只不过正数和0的补码跟他原码在形式上相同,负数的补码在形式上与其绝对值的原码取反加一相同。
 
2. 两套乘法指令结果例程:
 
;; 程序存储为 x.s
 
extern printf
global main
 
section .data
  str1: db "%x",0x0d,0x0a,0
  n: db 0x02
section .text
main:
  xor eax,eax
  mov al, 0xec
  mul byte [n] ;有符号乘法指令为: imul
 
  push eax
  push str1
  call printf
   
  add esp,byte 4
  ret
   
编译步骤:
1. nasm -felf x.s
2. gcc x.o
 
ubuntu7.04 下用nasm和gcc编译通过。结果符合文章所述









</Entry><Entry KeyWord="typedef (2011)" ActionWord=" " Tipo="1" Flag="0">1. 基本解释
  typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(strUCt等)。
  在编程中使用typedef目的一般有两个,一个是给变量一个易记且意义明确的新名字,另一个是简化一些比较复杂的类型声明。
  至于typedef有什么微妙之处,请你接着看下面对几个问题的具体阐述。
  2. typedef &amp;结构的问题
  当用下面的代码定义一个结构时,编译器报了一个错误,为什么呢?莫非C语言不允许在结构中包含指向它自己的指针吗?请你先猜想一下,然后看下文说明:
  typedef struct tagNode
  {
  char *pItem;
  pNode pNext;
  } *pNode;
  答案与分析:
  1、typedef的最简单使用
  typedef long byte_4;
  给已知数据类型long起个新名字,叫byte_4。
  2、 typedef与结构结合使用
  typedef struct tagMyStruct
  {
  int iNum;
  long lLength;
  } MyStruct;
  这语句实际上完成两个操作:
  1) 定义一个新的结构类型
  struct tagMyStruct
  {
  int iNum;
  long lLength;
  };
  分析:tagMyStruct称为“tag”,即“标签”,实际上是一个临时名字,struct 关键字和tagMyStruct一起,构成了这个结构类型,不论是否有typedef,这个结构都存在。
  我们可以用struct tagMyStruct varName来定义变量,但要注意,使用tagMyStruct varName来定义变量是不对的,因为struct 和tagMyStruct合在一起才能表示一个结构类型。
  2) typedef为这个新的结构起了一个名字,叫MyStruct。
  typedef struct tagMyStruct MyStruct;
  因此,MyStruct实际上相当于struct tagMyStruct,我们可以使用MyStruct varName来定义变量。
  答案与分析
  C语言当然允许在结构中包含指向它自己的指针,我们可以在建立链表等数据结构的实现上看到无数这样的例子,上述代码的根本问题在于typedef的应用。
  根据我们上面的阐述可以知道:新结构建立的过程中遇到了pNext域的声明,类型是pNode,要知道pNode表示的是类型的新名字,那么在类型本身还没有建立完成的时候,这个类型的新名字也还不存在,也就是说这个时候编译器根本不认识pNode。
  解决这个问题的方法有多种:
  1)、
  typedef struct tagNode
  {
  char *pItem;
  struct tagNode *pNext;
  } *pNode;
  2)、
  typedef struct tagNode *pNode;
  struct tagNode
  {
  char *pItem;
  pNode pNext;
  };
  注意:在这个例子中,你用typedef给一个还未完全声明的类型起新名字。C语言编译器支持这种做法。
  3)、规范做法:
  struct tagNode
  {
  char *pItem;
  struct tagNode *pNext;
  };
  typedef struct tagNode *pNode;
  3. typedef &amp; #define的问题
  有下面两种定义pStr数据类型的方法,两者有什么不同?哪一种更好一点?
  typedef char *pStr;
  #define pStr char *;
  答案与分析:
  通常讲,typedef要比#define要好,特别是在有指针的场合。请看例子:
  typedef char *pStr1;
  #define pStr2 char *;
  pStr1 s1, s2;
  pStr2 s3, s4;
  在上述的变量定义中,s1、s2、s3都被定义为char *,而s4则定义成了char,不是我们所预期的指针变量,根本原因就在于#define只是简单的字符串替换而typedef则是为一个类型起新名字。
  #define用法例子:
  #define f(x) x*x
  main( )
  {
  int a=6,b=2,c;
  c=f(a) / f(b);
  printf("%d \n",c);
  }
  以下程序的输出结果是: 36。
  因为如此原因,在许多C语言编程规范中提到使用#define定义时,如果定义中包含表达式,必须使用括号,则上述定义应该如下定义才对:
  #define f(x) (x*x)
  当然,如果你使用typedef就没有这样的问题。
  4. typedef &amp; #define的另一例
  下面的代码中编译器会报一个错误,你知道是哪个语句错了吗?
  typedef char * pStr;
  char string[4] = "abc";
  const char *p1 = string;
  const pStr p2 = string;
  p1++;
  p2++;
  答案与分析:
  是p2++出错了。这个问题再一次提醒我们:typedef和#define不同,它不是简单的文本替换。上述代码中const pStr p2并不等于const char * p2。const pStr p2和const long x本质上没有区别,都是对变量进行只读限制,只不过此处变量p2的数据类型是我们自己定义的而不是系统固有类型而已。因此,const pStr p2的含义是:限定数据类型为char *的变量p2为只读,因此p2++错误。
  (注:关于const的限定内容问题,在本系列第二篇有详细讲解)。
  #define与typedef引申谈
  1) #define宏定义有一个特别的长处:可以使用 #ifdef ,#ifndef等来进行逻辑判断,还可以使用#undef来取消定义。
  2) typedef也有一个特别的长处:它符合范围规则,使用typedef定义的变量类型其作用范围限制在所定义的函数或者文件内(取决于此变量定义的位置),而宏定义则没有这种特性。
  5. typedef &amp; 复杂的变量声明
  在编程实践中,尤其是看别人代码的时候,常常会遇到比较复杂的变量声明,使用typedef作简化自有其价值,比如:
  下面是三个变量的声明,我想使用typdef分别给它们定义一个别名,请问该如何做?
  &gt;1:int *(*a[5])(int, char*);
  &gt;2:void (*b[10]) (void (*)());
  &gt;3. doube(*)() (*pa)[9];
  答案与分析:
  对复杂变量建立一个类型别名的方法很简单,你只要在传统的变量声明表达式里用类型名替代变量名,然后把关键字typedef加在该语句的开头就行了。
  &gt;1:int *(*a[5])(int, char*);
  //pFun是我们建的一个类型别名
  typedef int *(*pFun)(int, char*);
  //使用定义的新类型来声明对象,等价于int* (*a[5])(int, char*);
  pFun a[5];
  &gt;2:void (*b[10]) (void (*)());
  //首先为上面表达式蓝色部分声明一个新类型
  typedef void (*pFunParam)();
  //整体声明一个新类型
  typedef void (*pFun)(pFunParam);
  //使用定义的新类型来声明对象,等价于void (*b[10]) (void (*)());
  pFun b[10];
  &gt;3. doube(*)() (*pa)[9];
  //首先为上面表达式蓝色部分声明一个新类型
  typedef double(*pFun)();
  //整体声明一个新类型
  typedef pFun (*pFunParam)[9];
  //使用定义的新类型来声明对象,等价于doube(*)() (*pa)[9];</Entry><Entry KeyWord="replication  repair 同步精确(2011)" ActionWord=" " Tipo="1" Flag="0">USE Distribution
GO

SET NOCOUNT ON

DECLARE @command_id int
        ,@tsn nvarchar(50)


SELECT @command_id = 10
       ,@tsn = '0x00000AEE00003D8E001100000000'


IF OBJECT_ID('tempdb..#repl') IS NOT NULL
    DROP TABLE #repl
    
CREATE TABLE #repl
    (    id int
             PRIMARY KEY IDENTITY(1,1) NOT NULL
        ,xact_seno varbinary(16)   NULL
        ,originator_srvname sysname NULL
        ,originator_db sysname NULL
        ,article_id  int NULL
        ,type int NULL
        ,partial_command bit  NULL
        ,hashkey int NULL
        ,originator_publication_id int NULL
        ,originator_db_version INT  NULL
        ,originator_lsn varbinary(16)  NULL
        ,command nvarchar(1024)
        ,command_id int NULL
)

DECLARE @cmd nvarchar(max)

SET @cmd = N'EXEC sp_browsereplcmds N' + QUOTENAME(@tsn,N'''')
          +N',N'+ QUOTENAME(@tsn,N'''')
                    
INSERT #repl EXEC (@cmd)

SELECT * FROM #repl
WHERE command_id=@command_id
</Entry><Entry KeyWord="Replication_重建同步(2011)" ActionWord=" " Tipo="1" Flag="0">-- ===========================================================
-- script for :
-- replication list
-- ===========================================================
SET NOCOUNT ON;

DECLARE
    @ServerName sysname
;

SET @ServerName = @@SERVERNAME;

DECLARE
    @sql nvarchar(max)
;

SET
    @sql = N'
;WITH
ART AS(
    SELECT
        article_id = ART.artid,
        publication_id = ART.pubid,
        object_id = ART.objid,
        article_name = ART.name,
        destination_schema = ART.dest_owner,
        destination_object = ART.dest_table,
        row_filter = ART.filter_clause,
        column_filter = CASE
                            WHEN (
                                        SELECT COUNT(*) FROM sys.columns WITH(NOLOCK)
                                        WHERE object_id = ART.objid
                                    )
                                    = (
                                        SELECT COUNT(*) FROM dbo.sysarticlecolumns WITH(NOLOCK)
                                        WHERE artid = ART.artid
                                    )
                                THEN 0
                            ELSE 1
                        END,
        ins_cmd,
        upd_cmd,
        del_cmd
    FROM dbo.sysarticles ART WITH(NOLOCK)
    UNION ALL
    SELECT
        article_id = ARTS.artid,
        publication_id = ARTS.pubid,
        object_id = ARTS.objid,
        article_name = ARTS.name,
        destination_schema = ARTS.dest_owner,
        destination_object = ARTS.dest_object,
        row_filter = NULL,
        column_filter = 0,
        ins_cmd = NULL,
        upd_cmd = NULL,
        del_cmd = NULL
    FROM dbo.sysschemaarticles ARTS WITH(NOLOCK)
),
REPL AS(
    SELECT
        ART.article_id,
        ART.publication_id,
        ART.object_id,
        ART.article_name,
        ART.destination_schema,
        ART.destination_object,
        ART.row_filter,
        ART.column_filter,
        ART.ins_cmd,
        ART.upd_cmd,
        ART.del_cmd,

        publication_name = PUB.name,

        destination_server = SUB.srvname,
        destination_database = SUB.dest_db
    FROM ART
        INNER JOIN dbo.syspublications PUB WITH(NOLOCK)
            ON ART.publication_id = PUB.pubid
        LEFT JOIN dbo.syssubscriptions SUB WITH(NOLOCK)
            ON ART.article_id = SUB.artid
                AND SUB.srvid &lt;&gt; -1 AND dest_db &lt;&gt; N''virtual'' -- not include virtual replication
                                                                -- when publication property @immediate_sync = true, will include virtual replication for each article
),
OBJ AS(
    SELECT
        OBJ.object_id,
        object_type = OBJ.type,
        schema_name = SCH.name,
        object_name = OBJ.name
    FROM sys.objects OBJ WITH(NOLOCK),
        sys.schemas SCH WITH(NOLOCK)
    WHERE OBJ.schema_id = SCH.schema_id
),
RE AS(
    SELECT
        publication_name = REPL.publication_name,
        article_name = REPL.article_name,
        object_type = OBJ.object_type,

        publisher_server = @ServerName,    
        publisher_database = @database_name,
        publisher_schema = OBJ.schema_name,
        publisher_object = OBJ.object_name,
        
        subscriber_server = REPL.destination_server,
        subscriber_database = REPL.destination_database,
        subscriber_schema = REPL.destination_schema,
        subscriber_object = REPL.destination_object,
        
        row_filter = REPL.row_filter,
        column_filter = CONVERT(nvarchar(max),
                CASE
                    WHEN column_filter = 0 THEN NULL
                    ELSE STUFF(
                                (
                                    SELECT
                                        N'','' + C.name
                                    FROM sys.columns C WITH(NOLOCK),
                                        dbo.sysarticlecolumns ARTC WITH(NOLOCK)
                                    WHERE C.column_id = ARTC.colid
                                        AND C.object_id = REPL.object_id
                                        AND ARTC.artid = REPL.article_id
                                    FOR XML PATH(''''), TYPE
                                ).value(''/'', ''nvarchar(max)''),
                                1, 1, N'''')
                END),

        insert_cmd = CONVERT(nvarchar(255), REPL.ins_cmd),
        update_cmd = CONVERT(nvarchar(255), REPL.upd_cmd),
        delete_cmd = CONVERT(nvarchar(255), REPL.del_cmd)
    FROM REPL, OBJ
    WHERE REPL.object_id = OBJ.object_id
)
SELECT
    publication_name,
    article_name,
    object_type,

    publisher_server,
    publisher_database,
    publisher_schema,
    publisher_object,
    
    subscriber_server,
    subscriber_database,
    subscriber_schema,
    subscriber_object,
    
    row_filter,
    column_filter,

    insert_cmd,
    update_cmd,
    delete_cmd
FROM RE
';

DECLARE @tb_repliation TABLE(
    publication_name sysname,
    article_name sysname,
    object_type char(2),

    publisher_server sysname,
    publisher_database sysname,
    publisher_schema sysname,
    publisher_object sysname,

    subscriber_server sysname NULL,
    subscriber_database sysname NULL,
    subscriber_schema sysname NULL,
    subscriber_object sysname NULL,

    row_filter nvarchar(max),
    column_filter nvarchar(max),

     insert_cmd nvarchar(255),
    update_cmd nvarchar(255),
    delete_cmd nvarchar(255)
);

DECLARE
    @s nvarchar(max),
    @database_name sysname
;

DECLARE CUR_db CURSOR LOCAL FORWARD_ONLY READ_ONLY STATIC
FOR
SELECT
    name
FROM sys.databases WITH(NOLOCK)
WHERE is_published = 1
    AND state IN(0, 5) --AND name = 'DropShip'
;

OPEN CUR_db;
FETCH CUR_db INTO
    @database_name
;

WHILE @@FETCH_STATUS = 0
BEGIN;
    SET @s = N'
USE ' + QUOTENAME(@database_name) + N'
' + @sql;
    
    INSERT @tb_repliation
    EXEC sp_executesql
        @s,
        N'
            @ServerName sysname,
            @database_name sysname
        ',
        @ServerName, @database_name
    ;

    FETCH CUR_db INTO
        @database_name
    ;
END;
CLOSE CUR_db;
DEALLOCATE CUR_db;

WITH
DATA AS(
    SELECT
        *
    FROM @tb_repliation
    WHERE subscriber_server IS NOT NULL
),
DB AS(
    SELECT DISTINCT
        publisher_server, publisher_database
    FROM DATA
),
REQ AS(
    SELECT DISTINCT
        publication_name,
        
        publisher_server,
        publisher_database,
        publisher_schema,
        publisher_object,
        publisher = QUOTENAME(publisher_server)
                    + N'.' + QUOTENAME(publisher_database)
                    + N'.' + QUOTENAME(publisher_schema)
                    + N'.' + QUOTENAME(publisher_object),

        subscriber_server,
        subscriber_database,
        subscriber_schema,
        subscriber_object,

        row_filter,
        column_filter,

        insert_cmd,
        delete_cmd,
        update_cmd
    FROM DATA  --WHERE publisher_database = N'svc2005'
            --AND (publisher_object= N'RMAMaster' OR publisher_object= N'RMATransaction' )
)
----SELECT * FROM DB
SELECT
    N'
UNION ALL
    SELECT
        publication_name = ' + ISNULL(N'N' + QUOTENAME(publication_name, N''''), N'NULL') + N',

        publisher = N' + QUOTENAME(publisher, N'''') + N',

        subscriber_server = N' + QUOTENAME(subscriber_server, N'''') + N',
        subscriber_database = N' + QUOTENAME(subscriber_database, N'''') + N',
        subscriber_schema = N' + QUOTENAME(subscriber_schema, N'''') + N',
        subscriber_object = N' + QUOTENAME(subscriber_object, N'''') + N',

        row_filter = ' + ISNULL(N'N''' + REPLACE(row_filter, N'''', N'''''') + N'''', N'NULL') + N',
        column_filter = ' + ISNULL(N'N''' + REPLACE(column_filter, N'''', N'''''') + N'''', N'NULL') + N',

        insert_cmd = ' + ISNULL(N'N''' + REPLACE(insert_cmd, N'''', N'''''') + N'''', N'NULL') + N',
        delete_cmd = ' + ISNULL(N'N''' + REPLACE(delete_cmd, N'''', N'''''') + N'''', N'NULL') + N',
        update_cmd = ' + ISNULL(N'N''' + REPLACE(update_cmd, N'''', N'''''') + N'''', N'NULL') + N'
'
FROM REQ  
WHERE publication_name= N'Rp_IPP3_E5PORTALDB01.IPP3_02'
;</Entry><Entry KeyWord="查询 fulltext(2011)" ActionWord=" " Tipo="1" Flag="0">

use  eCommerce2005
go


select * from sys.fulltext_catalogs


select OBJECT_NAME(object_id),* from sys.fulltext_indexes


--查询fulltext objectname and col
select OBJECT_NAME(ft.object_id),col.name, ft.* from sys.fulltext_index_columns ft
inner join sys.columns col
on ft.object_id=col.object_id
and ft.column_id=col.column_id

        

</Entry><Entry KeyWord="C++ struct (2011)" ActionWord=" " Tipo="1" Flag="0">node表示一个结构体,结构如下:
{
  datatype data;
  struct node *next;
}
StackNode的含义和node相同。
*LinkStack表示一个StackNode类型的指针,指向的对象是一个StackNode对象。

举例如下:

int main()
{
node a1;
struct node a2;
StackNode a3;
LinkStack ps;
ps = &amp;a3;
return 0;
}</Entry><Entry KeyWord="c++ 指针(2011)" ActionWord=" " Tipo="1" Flag="0">第一种情况:
    int *p;
    cout&lt;&lt;p&lt;&lt;endl;  
    cout&lt;&lt;&amp;p&lt;&lt;endl;
    return 0;
        结果:编译通过,执行错误。原因:指针p未初始化,野指针,引起内存错误。
第二种情况:
    int *p=0;         // 指针定义并初始化。注意:这里的不是给p赋值,而是初始化为空指针,等价于NULL。
    cout&lt;&lt;p&lt;&lt;endl;    // 输出: 。指的是指针p指向的地址,这里为空。
    cout&lt;&lt;&amp;p&lt;&lt;endl;   // 输出:ff60 。指的是存放指针p的地址。
    return 0;
        结果:编译通过,执行通过。
第三种情况:
    int *p=NULL;      // 指针定义并初始化,初始化为空指针。
    cout&lt;&lt;p&lt;&lt;endl;    // 输出: 。指的是指针p指向的地址,这里为空。
    cout&lt;&lt;&amp;p&lt;&lt;endl;   // 输出:ff60 。指的是存放指针p的地址。
    return 0;
        结果:编译通过,执行通过。这种情况等价于第二种情况,一般写为这种,不会引起歧义。
第四种情况:
    int *p=1;
    cout&lt;&lt;p&lt;&lt;endl;  
    cout&lt;&lt;&amp;p&lt;&lt;endl;
    return 0;
        结果:编译不通过。原因:在指针p未分配内存空间的情况下,试图赋值。
第五种情况:
    int *p = new int; // 指针定义并初始化,分配内存空间。
    *p = 1;           // 指针赋值。
    cout&lt;&lt;*p&lt;&lt;endl;   // 输出:      。指的是指针p指向的地址中存放的数据。
    cout&lt;&lt;p&lt;&lt;endl;    // 输出:b97e0。指的是指针p指向的内存地址。
    cout&lt;&lt;&amp;p&lt;&lt;endl;   // 输出:ff60。指的是存放指针p的内存地址。
    return 0;
        结果:编译通过,执行通过。
</Entry><Entry KeyWord="typedef void (*Fun) (void)指针函数(2011)" ActionWord=" " Tipo="1" Flag="0">为便于理解,你可以这样解释:
typedef void(* Fun)(void) Fun
类似于
typedef int INT

Fun在声明以后,可以把它当作数据类型声明其他变量
Fun的确切意义是一个函数指针类型,该函数没有参数且无返回值  

定义了一个int类型的变量i;
而这样
typedef INT int;
表示用户自己定义了一个整型数据类型INT,实际上就等同于int
所以:INT ii;
同上,表示定义了一个int类型的变量ii;

同样的:
void (*pFn)(void)
定义了一个函数指针,该函数指针指向 类似于 void Foo(void)函数的函数入口地址
而这样:
typedef void (*Fun)(void)
表示用户自己定义了一个函数指针数据类型

Fun pf;
表示定义了一个函数指针pf,改函数指针指向类似于void Foo(void)的函数  </Entry><Entry KeyWord="智力题(2011)" ActionWord=" " Tipo="1" Flag="0">
1000瓶药水,其中至多有1瓶剧毒,现在给你10只小狗在24小时内通过小狗试药的方式找出哪瓶药有毒或者全部无毒(小狗服完药20小时后才能判断是否中毒)

这道题目太残忍

把狗从0-9编号
把药水按1-1000编号
把药水编号按二进制,如果第i位(因为最大1000,所以bit位为0-9)bit位为1,则分给编号为i的狗狗喝
最后得一二进制数,如果编号为i的狗狗死了,该数的第i bit位为1,该数就是有毒的药水编号

要死多少条狗啊,…</Entry><Entry KeyWord="返回字符串长度strlen(2011)" ActionWord=" " Tipo="1" Flag="0">系统函数:
int strlen (const char * str)
       {
          int length = 0;
          while( *str++ )
                  ++length;
           return( length );
       }

不用中间变量:
int strlen (const char * str)
       {
          if(*str) return strlen(++str)+1;
          return 0;
       }

</Entry><Entry KeyWord="const char* str (2011)" ActionWord=" " Tipo="1" Flag="0">要记住:标准也是在妥协下的产物,标准上允许的不一定是正确的。
我没有读过C++标准,我也从来不是一个标准的拥趸,泛标准论本来就不是什么好事情

不过我相信在这方面我没法说服你,因为你很可能还没有理解软件工业化的许多痛苦,还是很坚持“标准”的。

我们假定标准规定char * a ="abcd"合法,那么标准自己是矛盾的。大家都知道"abcd"不是变量(如果你反驳,我就说什么都白搭),一个常量是不可能有非常量的地址的,而这个表达式的左侧是一个存储非常量地址的指针,标准怎么解释这种矛盾?

我还想说一个事实,char * a= "abcd",依赖编译器的不同,"abcd"放的位置可能是只读存储区,在这种情况下a[2] = 'b'也许不会导致语法错误,但是会导致程序崩溃

如果标准允许你这样写,要么是标准有bug,要么编译器不完全符合标准。然而在实际生产中,是否符合标准不是最重要的,程序不崩溃才是最重要的,因此如果编译器不支持标准某个特殊规定,那么标准就不能使用。</Entry><Entry KeyWord="replication 查找  articles(2011)" ActionWord=" " Tipo="1" Flag="0">
use distribution
go

select pub.publication,pub.publisher_db,art.article  from dbo.MSpublications pub WITH (NOLOCK)
inner join  dbo.MSarticles art WITH (NOLOCK)
on pub.publication_id=art.publication_id
where

publication like '%Rp_CUSTOMER_NEWSQL2.DATACACHE_01%'
</Entry><Entry KeyWord="&amp;lt;winsock2.h&amp;gt;与&amp;lt;windows.h&amp;gt; (2011)" ActionWord=" " Tipo="1" Flag="0">有关同时包含&lt;winsock2.h&gt;与&lt;windows.h&gt;头文件的问题


推荐

    最近发现winsock2.h头文件与windows.h头文件在同时包含的时候会有问题,编译时会产生很多类型重复定义的错误。分析一下 winsock.h、winsock2.h和windows.h三个头文件,可以发现:要解决这个问题,需要首先包含winsock2.h,然后再包括 windows.h,要注意包含的顺序。
    在Windows.h中,包含了winsock.h(winsock.h支持socket 1.1)。因此首先包含windows.h,然后再包含winsock2.h,显然会出现问题。</Entry><Entry KeyWord="#pragma   comment(lib, &amp;quot;Ws2_32.lib &amp;quot;) (2011)" ActionWord=" " Tipo="1" Flag="0">#pragma   comment   的用法实在是太多了,可以告诉你的是
#pragma   comment(lib, "Ws2_32.lib ")表示链接Ws2_32.lib这个库。
和在工程设置里写上链入Ws2_32.lib的效果一样,不过这种方法写的
程序别人在使用你的代码的时候就不用再设置工程settings了。</Entry><Entry KeyWord="socket send (2011)" ActionWord=" " Tipo="1" Flag="0">#include "stdafx.h"

#include &lt;winsock2.h&gt;
#include &lt;windows.h&gt;
#include &lt;stdio.h&gt;
#pragma comment(lib, "WS2_32.lib")

#define DEFAULT_BUFLEN 512
#define DEFAULT_PORT 27015

int main() {

    //----------------------
    // Declare and initialize variables.
    int iResult;
    WSADATA wsaData;

    SOCKET ConnectSocket;
    struct sockaddr_in clientService;

    int recvbuflen = DEFAULT_BUFLEN;
    char *sendbuf = "Client: sending data test";
    char recvbuf[DEFAULT_BUFLEN] = "";

    //----------------------
    // Initialize Winsock
    iResult = WSAStartup(MAKEWORD(2,2), &amp;wsaData);
    if (iResult != NO_ERROR) {
        printf("WSAStartup failed with error: %d\n", iResult);
        return 1;
    }

    //----------------------
    // Create a SOCKET for connecting to server
    ConnectSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if (ConnectSocket == INVALID_SOCKET) {
        printf("socket failed with error: %ld\n", WSAGetLastError());
        WSACleanup();
        return 1;
    }

    //----------------------
    // The sockaddr_in structure specifies the address family,
    // IP address, and port of the server to be connected to.
    clientService.sin_family = AF_INET;
    clientService.sin_addr.s_addr = inet_addr( "127.0.0.1" );
    clientService.sin_port = htons( DEFAULT_PORT );

    //----------------------
    // Connect to server.
    iResult = connect( ConnectSocket, (SOCKADDR*) &amp;clientService, sizeof(clientService) );
    if (iResult == SOCKET_ERROR) {
        printf( "connect failed with error: %d\n", WSAGetLastError() );
        closesocket(ConnectSocket);
        WSACleanup();
        return 1;
  }

    //----------------------
    // Send an initial buffer
    iResult = send( ConnectSocket, sendbuf, (int)strlen(sendbuf), 0 );
    if (iResult == SOCKET_ERROR) {
        printf("send() failed with error: %d\n", WSAGetLastError());
        closesocket(ConnectSocket);
        WSACleanup();
        return 1;
    }

    printf("Bytes Sent: %d\n", iResult);

    // shutdown the connection since no more data will be sent
    iResult = shutdown(ConnectSocket, SD_SEND);
    if (iResult == SOCKET_ERROR) {
        printf("shutdown failed with error: %d\n", WSAGetLastError());
        closesocket(ConnectSocket);
        WSACleanup();
        return 1;
    }

    // Receive until the peer closes the connection
    do {

        iResult = recv(ConnectSocket, recvbuf, recvbuflen, 0);
        if ( iResult &gt; 0 )
            printf("Bytes received: %d\n", iResult);
        else if ( iResult == 0 )
            printf("Connection closed\n");
        else
            printf("recv failed with error: %d\n", WSAGetLastError());

    } while( iResult &gt; 0 );


    // cleanup
    closesocket(ConnectSocket);
    WSACleanup();

    return 0;
}

</Entry><Entry KeyWord="随机查询一条数据newid(2011)" ActionWord=" " Tipo="1" Flag="0">select IPADDRESS,ShippingAddress1, ShippingState,ShippingZipCode,ShippingCity, bBillingCity,bBillingAddress1,bBillingZipCode,bBillingState from NHISSLS.dbo.View3YN_SOMaster with(nolock) where sonumber = (SELECT  top 1 sonumber  from NHISSLS.dbo.View3YN_SOMaster with(nolock) order by newid())
</Entry><Entry KeyWord="resource view Opened in another editor (2011)" ActionWord=" " Tipo="1" Flag="0">VC2005 无法打开Resource View.提示Opened in another editor ?????




今天我也遇到了这个问题,在网上搜索了很多,说得都不是很清楚。最后还是我自己解决问题的。
方法是:打开VC2005,然后在工程编辑器(那个最主要的我们编写代码的窗口)把所有打开的文件关闭,让它变成一个空窗口。
然后再去点击RESOURCE VIEW的树状图。它就可以打开了。</Entry><Entry KeyWord="user  deny 权限(2011)" ActionWord=" " Tipo="1" Flag="0">
use  @@database

declare @purview varchar(200)
declare @tableName varchar(200)
 
set @tableName='dbo.arinvt01'

set @purview=' delete ,insert,alter  '


set nocount on

create table #RoleMember
(DBRole varchar(100),
MemberName varchar(100),
MemberSid varbinary(2048))

insert into #RoleMember
exec sp_helprolemember




select DBRole,MemberName from #RoleMember
where  DBRole not like '%msrepl%'
and MemberName not in ('CDDBA','dbo','MonDbo','RepDbo')

declare @Sql varchar(8000)
set @Sql='use '+db_name() +CHAR(10)+CHAR(10)
declare @memberName varchar(200)

DECLARE DATA_CURSOR CURSOR LOCAL FORWARD_ONLY STATIC READ_ONLY FOR
select MemberName from #RoleMember
where  DBRole not like '%msrepl%'
and MemberName not in ('CDDBA','dbo','MonDbo','RepDbo')

OPEN DATA_CURSOR
    FETCH NEXT FROM DATA_CURSOR INTO @memberName
WHILE @@FETCH_STATUS = 0
    BEGIN
    set @Sql+='deny '+@purview+' on OBJECT::'+@tableName+' to '+@memberName+CHAR(10)


    FETCH NEXT FROM DATA_CURSOR INTO @memberName

    end
    CLOSE DATA_CURSOR
    DEALLOCATE DATA_CURSOR

drop table #RoleMember


print @sql





--exec sp_helprolemember</Entry><Entry KeyWord="SetWindowRedraw(2011)" ActionWord=" " Tipo="1" Flag="0">Speeding up adding items to a combobox or listbox

Just a little tip: If you're going to be adding a lot of items to a listbox or combobox, there are a few little things you can do to improve the performance significantly. (Note: The improvements work only if you have a lot of items, like hundreds. Of course, the usability of a listbox with a hundred items is questionable, but I'm assuming you have a really good reason for doing this.)

First, you can disable redraw while you add the items. (This tip works for all controls, actually.)

SetWindowRedraw(hwnd, FALSE);
  ... add the items ...
  SetWindowRedraw(hwnd, TRUE);
  InvalidateRect(hwnd, NULL, TRUE);</Entry><Entry KeyWord="combobox (2011)" ActionWord=" " Tipo="1" Flag="0">
void Ctest22Dlg::OnBnClickedOk()
{
    m_listBox1.AddString("1");
    m_listBox1.AddString("2");
    m_listBox1.AddString("3");

    //设置下拉框宽度,图形界面设置下拉框高度
    m_listBox1.SetDroppedWidth(100);
    //m_listBox1.Set(100);


    int nCount = m_listBox1.GetCount();
    CString strText(_T(""));
    for(int i=0; i&lt;nCount; i++)
    {
        m_listBox1.GetLBText(i, strText);
        m_listBox2.AddString(strText);
    }


    CComboBox *cbb;
    cbb=&amp;m_listBox1;


    SetDropDownHeight(cbb,2);
}

//程序设置下拉框高度
void SetDropDownHeight(CComboBox* pMyComboBox, int itemsToShow)
{
  //Get rectangles
  CRect rctComboBox, rctDropDown;
  pMyComboBox-&gt;GetClientRect(&amp;rctComboBox); //Combo rect
  pMyComboBox-&gt;GetDroppedControlRect(&amp;rctDropDown); //DropDownList rect

  int itemHeight = pMyComboBox-&gt;GetItemHeight(-1); //Get Item height

  pMyComboBox-&gt;GetParent()-&gt;ScreenToClient(&amp;rctDropDown); //Converts coordinates

  rctDropDown.bottom = rctDropDown.top + rctComboBox.Height() + itemHeight*itemsToShow; //Set height
  pMyComboBox-&gt;MoveWindow(&amp;rctDropDown); //enable changes
}</Entry><Entry KeyWord="c++ 读文件 read file(2011)" ActionWord=" " Tipo="1" Flag="0">

void Ctest22Dlg::OnBnClickedCancel22()
{
    StdioFile file;
    file.Open("C:\\Temp\\123.txt",CFile::modeRead);
    CString strLine(_T(""));
    CString strText(_T(""));
    int k=file.GetLength();
    while(file.ReadString(strLine))
    {
      strText += strLine + _T("\r\n");
    }
    file.Close();

}
</Entry><Entry KeyWord="C++ JMP $+2 延时(2011)" ActionWord=" " Tipo="1" Flag="0">JMP 这个指令是占2个字节的吧,$+2就是当前指令的下一个指令,上网上搜了一些,JMP $+2主要用在端口出入输出上面,主要是延迟的功能给外设反映的时间,也就是延迟了一个指令的执行,但是不太好用,谢谢各位~~~!!</Entry><Entry KeyWord="linux 常用命令(2011)" ActionWord=" " Tipo="1" Flag="0">1.vi 建立文件

保存文件
如果是用vi编辑的话,在Insert状态下先按ESC,再输入冒号(:),再输入wq(保存退出)就可以了

2.clear 清屏

3.useradd 添加用户
passwd username 设置密码
userdel username 删除用户
groupadd groupname 添加组
groupdel 删除组



4.mkdir dir 创建目录
rmdir dir 删除目录
pwd 显示工作目录

ls -a 显示所有文件包括.开头文件
ls -l 以长列表显示

5.
cd 进入登陆目录
cd / 进入根目录
cd .. 上一级目录
cd /home 进入系统的home目录
cd home 进入当前目录下home目录

mv dirold dirnew 重命名目录

cp sourceDir targetDir  拷贝目录



6.
vi filename &amp; touch filename 创建文件
rm filename 删除文件
mv sourFile TargetFile 重命名文件
cp sourFile targetFile 拷贝文件
ln -s sourceFile TargetFile 创建文件链接



7.
more FileName 一次显示一屏文件内容
cat FileName 一次显示全部文件内容
cat file1 file2&gt;file3 将file1和file2内容写到file3中,覆盖
cat file1&gt;&gt;file2 将file1的内容追加到file2
grep "123" test.txt 在test文件中查找字符串“”

8.文件类型
- 普通文件
| link文件
d 目录
p 命名管道文件
b 块设备文件



9.
文件权限rwx(u(user 文件的属主),g(group 文件的属主的组),o(other 其他用户))

chmod a-x 123.txt (收回所有用户执行权限)
chmod go+w 123.txt (赋予组用户和其他用户的写权限)
chmod a= 123.txt (清除所有权限)

chmod 666 123.txt (赋予所有用户读写的权限)

10.
chown yind 123.txt 改变文件或目录的属主

chgrp grp 123.txt 改文件或目录的属组

chown yind:grp 123.txt 改变文件的属主和属组</Entry><Entry KeyWord="trigger (2011)监控表数据变化" ActionWord=" " Tipo="1" Flag="0">
-- trigger sample
ALTER TRIGGER [dbo].[TR_All_Monitor_Newegg_SoMaster]
    ON [dbo].[NewEgg_SOMaster]
    FOR UPDATE, INSERT, DELETE
AS
SET NOCOUNT ON;
INSERT dbo._MarkDelete_20090728_So(
    event_type, parameter, sql)
EXEC(N'DBCC INPUTBUFFER(@@SPID)');
</Entry><Entry KeyWord="hosts文件(2011)" ActionWord=" " Tipo="1" Flag="0">




C:\WINDOWS\system32\drivers\etc</Entry><Entry KeyWord="xml * 的用法与unicode(2011)" ActionWord=" " Tipo="1" Flag="0">
declare @xml xml

--------------------生成xml-----------
;WITH XMLNAMESPACES(DEFAULT 'http://www.mysuhect.com/namespace')
select @xml=
(
SELECT
      'MySubject' AS "Subject"
        ,'http://www.mysuhect.com/FromService' AS "FromService"
       ,'http://www.mysuhect.com/ToService' AS "ToService"
      ,[Node] =
            (SELECT 'AddItem' AS "Action"
                      ,'cc' AS "Comment"
                      ,'NESO' AS "Sender"
                      ,'EN' AS "Languag"
                      ,'联想' AS "CompanyCode"
                      ,'1.0' AS "Version"
         FOR XML PATH('Message'),TYPE
            )
       ,[Node] =
            (SELECT 'DeleteItem' AS "Action"
                      ,'tttttt' AS "Comment"
                      ,'NESO' AS "Sender"
                      ,'EN' AS "Languag"
                      ,N'联想' AS "CompanyCode"
                      ,'1.0' AS "Version"
         FOR XML PATH('Message'),TYPE
            )

FOR XML PATH ('MyProject'),TYPE
)
--select @xml as 生成






;WITH XMLNAMESPACES(DEFAULT 'http://www.mysuhect.com/namespace')
sELECT T.c.query(N'(./Message/*)')
FROM @xml.nodes('/MyProject/Node') T(c)    

;WITH XMLNAMESPACES(DEFAULT 'http://www.mysuhect.com/namespace')
sELECT T.c.query(N'(./Message)')
FROM @xml.nodes('/MyProject/Node') T(c)   


</Entry><Entry KeyWord="xml replace insert  空节点(2011)" ActionWord=" " Tipo="1" Flag="0">


declare @xml xml

set @xml = '&lt;root&gt;&lt;test&gt;&lt;/test&gt;&lt;/root&gt;'
--replace 不能替换空节点
set @xml.modify('replace value of (/root/test/text())[1] with "testnew value"')
select @xml
-- 如果节点为空,插入
set @xml.modify('insert text{ "test new value"} into (/root/test[not(text())])[1]')
select @xml
---replace 可以替换空节点
set @xml.modify('replace value of (/root/test/text())[1] with "replace new value"')
select @xml


set @xml.modify('insert text{ "test new value"} into (/root/test[not(text())])[1]')
select @xml</Entry><Entry KeyWord="index 碎片查询(2011)" ActionWord=" " Tipo="1" Flag="0">USE ItemMaintain;
GO
SELECT * FROM sys.dm_db_index_physical_stats
    (DB_ID(N'ItemMaintain'), OBJECT_ID(N'InventoryTransaction'), NULL, NULL , null);
GO
</Entry><Entry KeyWord="user 用户有的权限(2011)" ActionWord=" " Tipo="1" Flag="0">select object_name(id) obj,
(case [action] when 26 then 'REFERENCES'
 when 178 then 'CREATE FUNCTION'
 when 193 then 'SELECT'
 when 195 then 'INSERT'
 when 196 then 'DELETE'
 when 197 then 'UPDATE'
 when 198 then 'CREATE TABLE'
 when 203 then 'CREATE DATABASE'
 when 207 then 'CREATE VIEW'
 when 222 then 'CREATE PROCEDURE'
 when 224 then 'EXECUTE'
 when 228 then 'BACKUP DATABASE'
 when 233 then 'CREATE DEFAULT'
 when 235 then 'BACKUP LOG'
 when 236 then 'CREATE RULE' end) perm
from sysprotects where [uid]=user_id()</Entry><Entry KeyWord="Saving changes is not permitted 不能保存(2011)" ActionWord=" " Tipo="1" Flag="0">



This dialog states: "Saving changes is not permitted.
The changes you have made require the following tables to be dropped and re-created.
You have either made changes to a table that can't be re-created or enabled the option
Prevent saving changes that require the table to be re-created."


So what you want to do to configure the setting with the value you want (IMHO should be the default setting!).
Go to: Tools &gt; Options




Select the tab Designers and choose Tables and designers





And uncheck the option: "Prevent saving changes that require table re-creation".
Once you now save changes it will work.



</Entry><Entry KeyWord="errorlog(2011)" ActionWord=" " Tipo="1" Flag="0">1.       On the Start menu, point to All Programs, point to Microsoft SQL Server 2005, point to Configuration Tools, and then click SQL Server Configuration Manager.

2.       In SQL Server Configuration Manager, expand Services, and then click SQL Server

3.       In the details pane, right-click the name of the instance you want to start automatically, and then click Properties

4.       Click the Advanced tab, and Verify Startup Parameters. </Entry><Entry KeyWord="TRANSACTION  ISOLATION  LEVEL (2011)" ActionWord=" " Tipo="1" Flag="0">
READ UNCOMMITTED 脏读
READ COMMITTED   提交读
REPEATABLE READ  重复读(其他事务不能update数据,当前选择的数据)
SERIALIZABLE     串行读(其他事务,不能insert当前查询条件的数据)
SNAPSHOT     保持数据一致(不影响其他事务提交修改。)

USE TEST;
GO
--SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
--SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
--SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
---可重复读隔离级别
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
BEGIN TRANSACTION;

SELECT *
    FROM tb where id&lt;10;

COMMIT TRANSACTION;
GO





----第个线程
---处于阻塞状态

use  TEST
go


update tb set name='sss' where id=3





</Entry><Entry KeyWord="xml local-name()(2011)" ActionWord=" " Tipo="1" Flag="0">
declare @message xml


set @message=
'
&lt;Publish xmlns="http://soa.newegg.com/SOA/USA/InfrastructureService/V10/PubSubService"&gt;
  &lt;Subject&gt;MySubject&lt;/Subject&gt;
  &lt;FromService&gt;http://www.mysuhect.com/FromService&lt;/FromService&gt;
  &lt;ToService&gt;http://www.mysuhect.com/ToService&lt;/ToService&gt;
  &lt;Node&gt;
    &lt;Action&gt;AddItem&lt;/Action&gt;
    &lt;Case&gt;222222&lt;/Case&gt;
    &lt;Body&gt;
        &lt;ScanSerialNumber Action="ddddd"&gt;&lt;tt&gt;bbcc&lt;/tt&gt;&lt;/ScanSerialNumber&gt;
        &lt;ScanSerialNumber Action="ADD1"&gt;&lt;tt&gt;cc&lt;/tt&gt;&lt;/ScanSerialNumber&gt;
        &lt;Sender&gt;NESO&lt;/Sender&gt;
        &lt;Languag&gt;EN&lt;/Languag&gt;
        &lt;CompanyCode&gt;联想&lt;/CompanyCode&gt;
    &lt;/Body&gt;
  &lt;/Node&gt;
&lt;/Publish&gt;

'




SELECT @Message.query('            
   declare default element namespace "http://soa.newegg.com/SOA/USA/InfrastructureService/V10/PubSubService";            
   &lt;Publish&gt;            
   {/Publish/*[local-name()!="Node"]}               
   &lt;/Publish&gt;            
   ')            
SELECT @Message.query('            
   declare default element namespace "http://soa.newegg.com/SOA/USA/InfrastructureService/V10/PubSubService";            
   &lt;Publish&gt;            
   {/Publish/*[local-name()!="Node"]}    
    &lt;Node&gt;            
   {/Publish/Node/*[local-name()!="Body"]}                     
   &lt;/Node&gt;             
   &lt;/Publish&gt;            
   ')   </Entry><Entry KeyWord="CURSOR  多次申明(2011)" ActionWord=" " Tipo="1" Flag="0">USE paymentcenter
GO
/*==========================================================    
 Server:    PMCSQL  
 DataBase:  PaymentCenter  
 Author:    caff  
 ProcName:  dbo.Up_PMT_PMC_ForJob_TransferPaymentTransaction  
 Version:   1.00  
 Date:      20070618  
 Content:   Transfer to history  
* Parameters    
*   --------------------------------------------------------  
*    Input   : N/A  
*       
*    Output  : N/A  
*     
*  
* Table Used :  
* ---------------------------------------------------------   
*    
-----------------------------------------------------------    
Modified history:    
    
Date    Modified by   VER   Description    
------------------------------------------------------------    
20070618   caff       1.00  create  
20080912   jamebo   1.01  alter  
20081227    thomas   1.02  alter(add ingrian column)
20100121    Zorro    1.03   save more information in transaction view
==========================================================*/  
ALTER PROCEDURE dbo.Up_PMT_PMC_ForJob_TransferPaymentTransaction  
      @MaxTransactionId BIGINT
     ,@TransferCount INT  
AS  
BEGIN  
    SET XACT_ABORT ON  
    SET NOCOUNT ON  
 
    DECLARE @TransactionId BIGINT  
    DECLARE @Today DATETIME  
    SET @Today = CONVERT(DATETIME, CONVERT(CHAR(10), GETDATE(), 102))  
 
    IF @TransferCount &gt; 0     
    BEGIN  
        IF @MaxTransactionId &gt; 0  
        BEGIN  
            DECLARE data_cursor CURSOR
                LOCAL
                FORWARD_ONLY
                STATIC
                READ_ONLY
            FOR  
                SELECT TOP
                    (@TransferCount) TransactionId   
                FROM dbo.PaymentTransaction WITH(NOLOCK)   
                WHERE
                    TransactionId &lt; @MaxTransactionId  
        END ELSE BEGIN  
            DECLARE data_cursor CURSOR
                LOCAL
                FORWARD_ONLY
                STATIC
                READ_ONLY
            FOR  
                SELECT TOP
                    (@TransferCount) TransactionId   
                FROM dbo.PaymentTransaction WITH(NOLOCK)   
                WHERE
                    InDate &lt; @Today-40  
        END  
    END ELSE BEGIN  
        IF @MaxTransactionId &gt; 0  
        BEGIN  
            DECLARE data_cursor CURSOR
                LOCAL
                FORWARD_ONLY
                STATIC
                READ_ONLY
            FOR  
                SELECT
                    TransactionId   
                FROM dbo.PaymentTransaction WITH(NOLOCK)   
                WHERE
                    TransactionId &lt; @MaxTransactionId  
        END ELSE BEGIN  
            DECLARE data_cursor CURSOR
                LOCAL
                FORWARD_ONLY
                STATIC
                READ_ONLY
            FOR  
                SELECT
                    TransactionId   
                FROM dbo.PaymentTransaction WITH(NOLOCK)   
                WHERE
                    InDate &lt; @Today-40  
        END  
    END  
 
    OPEN data_cursor  
    FETCH NEXT FROM data_cursor INTO @TransactionId  
 
    WHILE @@FETCH_STATUS = 0  
    BEGIN  
        IF EXISTS(   
            SELECT
                TransactionId   
            FROM dbo.V_PaymentTransactionHistory WITH(NOLOCK)   
            WHERE
                TransactionId = @TransactionId  
         
         )  
        BEGIN  
            DELETE
            FROM dbo.PaymentTransaction
            WHERE
                TransactionId = @TransactionId  
        END  
        ELSE  
        BEGIN  
            BEGIN TRANSACTION  
 
            INSERT dbo.V_PaymentTransactionHistory  
            (  
                 [TransactionId]  
                ,[CombinedIdentity]  
                ,[LocalMerchantId]  
                ,[MerchantId]  
                ,[DivisionNumber]  
                ,[MerchantOrderNumber]  
                ,[AccountNumberMasked]  
                ,[AccountNumberEncrypted]  
                ,[CvNumberEncrypted]  
                ,[ExpireDate]  
                ,[Amount]  
                ,[Currency]  
                ,[CardType]  
                ,[SettleType]  
                ,[SettledAmount]  
                ,[Status]  
                ,[InDate]  
                ,[CreateDate]  
                ,[AuthorizedDate]  
                ,[LastRequestDate]  
                ,[LastSettleDate]  
                ,[VoidedDate]  
                ,[Expired]  
                ,[CurrencyISOCode]  
                ,IngrianCardNumber
                ,HashCardNumber
                ,GatewayReasonCode  
                ,GatewayApproveDate   
                ,GatewayApproveCode   
                ,GatewayAVSCode   
                ,GatewayCAVVCode   
                ,GatewayCVV2Code   
                ,MappedRefNumber   
                ,MerchantCustomerNumber   
                ,MerchantOrderNumber2
                ,RefundAmount
                ,AvsCode
            )  
            SELECT  
                [TransactionId]  
               ,RTRIM([CombinedIdentity])  
               ,RTRIM([LocalMerchantId])  
               ,RTRIM([MerchantId])  
               ,RTRIM([DivisionNumber])  
               ,RTRIM([MerchantOrderNumber])  
               ,RTRIM([AccountNumberMasked])  
               ,RTRIM([AccountNumberEncrypted])  
               ,RTRIM([CvNumberEncrypted])  
               ,RTRIM([ExpireDate])  
               ,[Amount]  
               ,RTRIM([Currency])  
               ,RTRIM([CardType])  
               ,[SettleType]  
               ,[SettledAmount]  
               ,[Status]  
               ,[InDate]  
               ,[CreateDate]  
               ,[AuthorizedDate]  
               ,[LastRequestDate]  
               ,[LastSettleDate]  
               ,[VoidedDate]  
               ,[Expired]  
               ,[CurrencyISOCode]  
               ,IngrianCardNumber
               ,HashCardNumber
               ,GatewayReasonCode  
               ,GatewayApproveDate   
               ,GatewayApproveCode   
               ,GatewayAVSCode   
               ,GatewayCAVVCode   
               ,GatewayCVV2Code   
               ,MappedRefNumber   
               ,MerchantCustomerNumber   
               ,MerchantOrderNumber2
               ,RefundAmount
               ,AvsCode
            FROM  [dbo].[PaymentTransaction] WITH(NOLOCK)  
            WHERE
                TransactionId = @TransactionId  
 
                DELETE
                FROM dbo.PaymentTransaction
                WHERE
                    TransactionId = @TransactionId  
 
            COMMIT TRANSACTION  
        END  
        FETCH NEXT FROM data_cursor INTO @TransactionId  
    END  
    CLOSE data_cursor  
    DEALLOCATE data_cursor  
END  
GO</Entry><Entry KeyWord="primary key 查找主键列(2011)" ActionWord=" " Tipo="1" Flag="0">


sp_pkeys EDI832</Entry><Entry KeyWord="replication 修复数据(2011)" ActionWord=" " Tipo="1" Flag="0">--{CALL [dbo].[sp_MSupd_dboItemDescription] (,,,,,'&lt;LongDescription Name="Detailed Specifications"&gt;&lt;Group GroupName="Spec"&gt;&lt;Property Key="Version" Value="General"/&gt;&lt;Property Key="Operating Systems Supported" Value="Mac OS"/&gt;&lt;/Group&gt;&lt;/LongDescription&gt;',2011-04-01 02:03:31.150,,,,,,,,,,,,,,NULL,,,,,,,,
--'00X-000A-00001           ',0x60001000)}

 

use distribution

go

exec sp_browsereplcmds '0x0000070300001D0A001500000000','0x0000070300001D0A001500000000'




go





declare @SourceServer nvarchar(255)
declare @SourceDB nvarchar(255)
declare @article nvarchar(255)
declare @TargetServer nvarchar(255)
declare @targetDB nvarchar(255)



set @TargetServer='s5rmadb01'
set @targetDB=''

set @SourceServer=''
set @SourceDB='codecenter'

set @article='ItemDescription'


set nocount on

if isnull(@targetDB,'')=''
set @targetDB=@SourceDB

if object_id('tempdb.dbo.#t') is not null
drop table #t

create table #t(tb_database nvarchar(255),
tb_owner nvarchar(255),tb_name nvarchar(255),
colname nvarchar(255),keyID int,
pk_name nvarchar(255))

declare @sql nvarchar(max)
set @sql=
N'use '+ @SourceDB +'
insert into #t
exec sp_pkeys '+@article +'
select * from #t
'
 exec (@sql)

declare @filter nvarchar(200)

set @sql='use '+@SourceDB+CHAR(10)+
'select @filter=isnull(''and S.''+ convert(nvarchar(4000),art.filter_clause) ,'''')from dbo.sysarticles art
inner join dbo.syssubscriptions sub
on sub.artid=art.artid
where charindex('''+@TargetServer+''', srvname)&gt;0
and art.name='''+@article+''''

--print @sql

 exec sp_executesql @sql,N'@filter  nvarchar(200) output',@filter=@filter output
 
--select @filter

--select * from #t

 declare @conditon nvarchar(500)
 set @conditon=stuff((select 'and S.'+colname+'=T.'+colname+' ' from #t for xml path('')),1,3,'')

 declare @conditonIn nvarchar(500)
 set @conditonIn=stuff((select 'and S.'+colname+'= ' from #t for xml path('')),1,3,'')

 if(isnull(@TargetServer,'')&lt;&gt;'')
 set @SourceServer=null
 else
 set @TargetServer=null
 
 set @sql=
 N'
 --------need insert or delete data
insert into  '+isnull(@TargetServer+'.','')+@targetDB+'.dbo.'+@article++CHAR(10)+
'select * from '+isnull(@SourceServer+'.','')+@SourceDB+'.dbo.'+@article+' S'+
CHAR(10)+'where '+@conditonIn+''+CHAR(10)+CHAR(10)+CHAR(10)+CHAR(10)
print @sql

set @sql=
 N'
-----data different
select COUNT(*) from '+isnull(@SourceServer+'.','')+@SourceDB+'.dbo.'+@article+' S '+
'where (1=1 '+@filter+' ) and not exists
(
select * from '+isnull(@TargetServer+'.','')+@targetDB+'.dbo.'+@article+' T '+
'where '+@conditon+CHAR(10)+
')'+CHAR(10)+CHAR(10)+CHAR(10)+CHAR(10)
print @sql

set @sql=
 N'
 ----insert into data
 while 1=1
 begin
insert into  '+isnull(@TargetServer+'.','')+@targetDB+'.dbo.'+@article+CHAR(10)+
'select top 500 * from '+isnull(@SourceServer+'.','')+@SourceDB+'.dbo.'+@article+' S '+
'where  (1=1 '+@filter+' ) and  not exists
(
select * from '+isnull(@TargetServer+'.','')+@targetDB+'.dbo.'+@article+' T '+
'where '+@conditon+CHAR(10)+
')
if @@rowcount&lt;500
break;
waitfor delay ''00:00:01''
end
'
print @sql








</Entry><Entry KeyWord="grant  授权用户对所有库的访问权限(2011)" ActionWord=" " Tipo="1" Flag="0">use master
go
set nocount on
declare @user_name sysname
        ,@password nvarchar(12)
select @user_name='tess'
        ,@password=N'123'

declare @database_Name sysname
        ,@sql nvarchar(max)



set @sql=N'if not exists(select top 1 1 from sys.syslogins with (nolock)
            where name='''+@user_name+''')'+char(10)
            +'create login '+@user_name+' with password='''+@password+''''+',CHECK_POLICY = OFF'+CHAR(10)
 

print @sql
--exec sp_executesql @sql

DECLARE Cur_dbName CURSOR LOCAL STATIC FORWARD_ONLY READ_ONLY    
FOR
select name
from sys.sysdatabases with (nolock)
where name not in ('master','msdb','tempdb','model','distribution','SSB')
        and status&amp;512&lt;&gt;512--判断数据的状态为OffLine

OPEN Cur_dbName      
FETCH NEXT FROM Cur_dbName INTO @database_Name
WHILE @@FETCH_STATUS=0    
    begin
        set @sql=N''+CHAR(10)
        set @sql=N'use '+@database_Name+'------数据库---------'+char(10)--+N'GO'+char(10)
                +N'if exists (select top 1 1
                    from sys.sysusers with(nolock)
                    where name='''+@user_name+''')'+char(10)
                +N'begin'+char(10)
                +N'exec sp_change_users_login ''Update_One'','''+@user_name+''','''+@user_name+''''+char(10)
                +N'end'+char(10)
                +N'else'+char(10)
                +N'begin'+char(10)
                +N'create user '+@user_name+' for login '+@user_name+char(10)
                +N'end'+char(10)
                --+N'exec sp_addrolemember ''db_datareader'','+' '''+@user_name+''''+char(10)
                +N'grant SELECT to '+@user_name++char(10)+char(10)
                 print @sql
               --exec sp_executesql @sql
        FETCH NEXT FROM Cur_dbName INTO @database_Name
    end
CLOSE Cur_dbName    
DEALLOCATE Cur_dbName
</Entry><Entry KeyWord="qurey replication_v2(2011)" ActionWord=" " Tipo="1" Flag="0">use distribution
go



select *,(select drop_publication as [*] FOR XML PATH ('root'),TYPE ) from
(

select p.publication, a.publisher_db,a.source_object,
ss.name,s.subscriber_db--,a.destination_object
,CHAR(10)+CHAR(10)+
'use '+p.publisher_db+CHAR(10)+' go'+CHAR(10)+
'EXEC sp_Dropsubscription @publication = N'''+p.publication+''''+CHAR(10)+
    ',@subscriber = N'''+ss.name+''''+CHAR(10)+
    ',@destination_db = N'''+Subscriber_DB+''''+CHAR(10)+
    ',@article = N'''+a.article+''''+CHAR(10)+
'EXEC sp_DropArticle @publication = N'''+p.publication+''''+CHAR(10)+
    ',@article = N'''+a.article+''''+CHAR(10)+CHAR(10)
 as drop_publication
from dbo.MSsubscriptions s
inner join dbo.MSarticles a
on  s.article_id=a.article_id and
s.publication_id=a.publication_id
inner join dbo.MSpublications p
on s.publication_id=p.publication_id
inner join sys.servers ss
on s.subscriber_id=ss.server_id

where
 a.article='EC_VideoMaster'

)c




</Entry><Entry KeyWord="left join与inner join(2011)" ActionWord=" " Tipo="1" Flag="0">

---bydba 1,left join 1 和left join 2的结果不同,2和表达式相同
 
----(1)
select COUNT(*)
from Ecommerce2005.dbo.EDI_Seller_BasicInfo a WITH(NOLOCK)
left join  Ecommerce2005.dbo.EDI_Seller_BasicInfo   b WITH(NOLOCK)
on a.sellerid=b.sellerid
and b.shiptype=a.shiptype
and b.shiptype=2
----(2)
select COUNT(*)
from Ecommerce2005.dbo.EDI_Seller_BasicInfo a WITH(NOLOCK)
left join  Ecommerce2005.dbo.EDI_Seller_BasicInfo   b WITH(NOLOCK)
on a.sellerid=b.sellerid
and b.shiptype=a.shiptype
where b.shiptype=2

----(3)
select COUNT(*)
from Ecommerce2005.dbo.EDI_Seller_BasicInfo a WITH(NOLOCK)
inner join  Ecommerce2005.dbo.EDI_Seller_BasicInfo   b WITH(NOLOCK)
on a.sellerid=b.sellerid
and b.shiptype=a.shiptype
and b.shiptype=2</Entry><Entry KeyWord="miss index (2011)" ActionWord=" " Tipo="1" Flag="0">



SELECT TOP 10 *
FROM sys.dm_db_missing_index_group_stats
ORDER BY avg_total_user_cost * avg_user_impact * (user_seeks + user_scans)DESC;




SELECT migs.group_handle, mid.*
FROM sys.dm_db_missing_index_group_stats AS migs
INNER JOIN sys.dm_db_missing_index_groups AS mig
    ON (migs.group_handle = mig.index_group_handle)
INNER JOIN sys.dm_db_missing_index_details AS mid
    ON (mig.index_handle = mid.index_handle)
WHERE migs.group_handle = 1814;








</Entry><Entry KeyWord="job schedule enable&amp;amp;disable(2011)" ActionWord=" " Tipo="1" Flag="0">DECLARE @job_name sysname
;

SET @job_name=N'Job_ItemMaintainNewegg_es.UP_EC_Batch_ImportData_Koala'
;

WITH JOB
AS
(
     SELECT J.*,S.schedule_id
     FROM msdb.dbo.sysjobs J WITH (NOLOCK)
     ,msdb.dbo.sysjobschedules S WITH (NOLOCK)
     WHERE J.job_id=S.job_id
     AND J.name=@job_name
)
,SCH
AS
(
     SELECT job_sch_enable=
              CASE S.enabled  WHEN 0
                   THEN N'disable'
                                  WHEN 1
                   THEN N'enable'
              END
             ,JOB.*
     FROM JOB,msdb.dbo.sysschedules S WITH (NOLOCK)
     WHERE JOB.schedule_id=S.schedule_id
)

SELECT * FROM SCH
</Entry><Entry KeyWord="sp_configure  重新配置(2011)" ActionWord=" " Tipo="1" Flag="0">

exec sp_configure 'allow updates', 0;
reconfigure;



EXEC sp_configure 'max text repl size', 2147483647;
RECONFIGURE
</Entry><Entry KeyWord="rebuild index(2011)" ActionWord=" " Tipo="1" Flag="0">USE [master]
GO

/****** Object:  StoredProcedure [dbo].[SP_DBAAutoIndex]    Script Date: 03/26/2011 17:07:33 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[SP_DBAAutoIndex]
    @database_name_list [nvarchar](max) = N'',
    @table_name_list [nvarchar](max) = NULL
WITH EXECUTE AS CALLER
AS
SET NOCOUNT ON    
--DECLARE    
-- @database_name_list nvarchar(max),    
-- @table_name_list nvarchar(max)    
--SELECT    
-- @database_name_list = N'dbaworker',    
-- @table_name_list = NULL    
    
SET NOCOUNT ON    
BEGIN TRY    
 -- =================================================    
 -- prepare parameters    
 -- =================================================    
 DECLARE    
  @flag_edition int,    
  @flag_all_database bit,    
  @flag_all_table bit    
    
 SELECT    
  @database_name_list = CASE     
     WHEN @database_name_list = N'' THEN DB_NAME()    
     ELSE @database_name_list END,    
  @flag_edition = CASE    
     WHEN CONVERT(sysname, SERVERPROPERTY(N'Edition')) LIKE N'Enterprise%' THEN 1    
     ELSE 0    
    END,    
  @flag_all_database = CASE    
    WHEN @database_name_list &gt; N'' THEN 0    
    ELSE 1 END,    
  @flag_all_table = CASE    
    WHEN @table_name_list &gt; N'' THEN 0    
    ELSE 1 END    
    
 -- process database list    
 IF OBJECT_ID(N'tempdb..#db') IS NOT NULL    
  DROP TABLE #db    
 CREATE TABLE #db(    
  name sysname     
   PRIMARY KEY    
   WITH(    
    IGNORE_DUP_KEY = ON))    
 ;WITH    
 DB AS(    
  SELECT    
   name = LTRIM(RTRIM(T.c.value('.[1]', 'sysname')))    
  FROM(    
   SELECT    
    database_name_list = CONVERT(xml,    
     N'&lt;c&gt;&lt;![CDATA['     
      + REPLACE(@database_name_list, N',', N']]&gt;&lt;/c&gt;&lt;c&gt;&lt;![CDATA[')    
      + N']]&gt;&lt;/c&gt;')    
  )A    
   CROSS APPLY A.database_name_list.nodes('/c') T(c)    
 )    
 INSERT #db(    
  name)    
 SELECT    
  name    
 FROM sys.databases D WITH(NOLOCK)      
 WHERE (@flag_all_database = 1 AND name NOT IN(N'master', N'model', N'msdb', N'tempdb', N'distribution', N'temptable'))    
  OR EXISTS(    
   SELECT * FROM DB    
   WHERE name = D.name)    
    
 -- process table list    
 IF OBJECT_ID(N'tempdb..#tb') IS NOT NULL    
  DROP TABLE #tb    
 CREATE TABLE #tb(    
  name sysname     
   PRIMARY KEY    
   WITH(    
    IGNORE_DUP_KEY = ON))    
 IF @flag_all_table = 0    
 BEGIN    
  WITH    
  TB AS(    
   SELECT    
    name = LTRIM(RTRIM(T.c.value('.[1]', 'sysname')))    
   FROM(    
    SELECT    
     table_name_list = CONVERT(xml,    
      N'&lt;c&gt;&lt;![CDATA['     
       + REPLACE(@table_name_list, N',', N']]&gt;&lt;/c&gt;&lt;c&gt;&lt;![CDATA[')    
       + N']]&gt;&lt;/c&gt;')    
   )A    
    CROSS APPLY A.table_name_list.nodes('/c') T(c)    
  )    
  INSERT #tb(    
   name)    
  SELECT     
   *    
  FROM tb    
  WHERE name &gt; N''    
 END    
    
 -- =================================================    
 -- process on each database    
 -- =================================================    
 -- process script    
 DECLARE    
  @sql_index nvarchar(max)    
 SELECT    
  @sql_index = N'    
  DECLARE    
   @db_id int,    
   @db_name sysname,    
   @mode sysname    
  SELECT    
   @db_id = DB_ID(),    
   @db_name = DB_NAME(),    
   @mode = N''LIMITED''    
    
  -- fetch all index    
  DECLARE CUR_Index CURSOR LOCAL FORWARD_ONLY READ_ONLY STATIC    
  FOR    
  WITH    
  PT AS(    
   SELECT    
    object_id, index_id,    
    partition_count = COUNT (*)    
   FROM sys.partitions    
   GROUP BY object_id, index_id    
  ),    
  COLMAX AS(    
   SELECT C.object_id    
   FROM sys.columns C WITH(NOLOCK), sys.types T    
   WHERE C.user_type_id = T.user_type_id    
    AND(    
     C.user_type_id IN(34, 35, 99)     
     OR (C.user_type_id IN(165, 167, 231, 241) AND C.max_length = -1))    
  )    
  SELECT    
   IX.object_id,    
   IX.index_id,    
   object_name = O.name,    
   schema_name = S.name,    
   index_name = IX.name,    
   partition_count = PT.partition_count,    
   allow_page_locks = IX.allow_page_locks,    
   has_maxcolumn = CASE     
     WHEN EXISTS(    
       SELECT * FROM COLMAX    
       WHERE object_id = IX.object_id)    
      THEN 1    
     ELSE 0 END    
  FROM sys.indexes IX WITH(NOLOCK)    
   INNER JOIN sys.objects O    
    ON IX.object_id = O.object_id    
   INNER JOIN sys.schemas S    
    ON S.schema_id = O.schema_id    
   INNER JOIN PT    
    ON IX.object_id = PT.object_id    
     AND IX.index_id = PT.index_id    
  WHERE O.is_ms_shipped = 0    
   AND O.name NOT LIKE N''%MarkDelete%''    
   AND IX.index_id &gt; 0'     
   + CASE     
     WHEN @flag_all_table = 1 THEN N''    
     ELSE N'    
   AND EXISTS(    
     SELECT * FROM #tb    
     WHERE name = O.name)    
'    
    END    
   + N'    
    
  DECLARE    
   @_log_recordid_index int,    
   @_log_recordid_defrage int,    
   @object_id int,    
   @index_id int,    
   @object_name sysname,    
   @schema_name sysname,    
   @index_name sysname,    
   @partition_count int,    
   @allow_page_locks bit,    
   @has_maxcolumn int    
  OPEN CUR_Index    
  FETCH CUR_Index INTO @object_id, @index_id, @object_name, @schema_name, @index_name, @partition_count, @allow_page_locks, @has_maxcolumn    
  WHILE @@FETCH_STATUS = 0    
  BEGIN    
   BEGIN TRY    
    -- record index process     
    SET @_log_recordid_index = NULL    
    INSERT TempTable.dbo.DBAIndexErrorLog(    
     DatabaseName, TableName, IndexName,    
     SQLCommand)    
    VALUES(    
     @db_name, QUOTENAME(@schema_name) + N''.'' + QUOTENAME(@object_name), @index_name,    
     N''sys.dm_db_index_physical_stats('' + RTRIM(@db_id) + N'', '' + RTRIM(@object_id) + N'', '' + RTRIM(@index_id) + N'', NULL, '''''' + RTRIM(@mode) + '''''')'')    
    SET @_log_recordid_index = SCOPE_IDENTITY()    
    
    -- =====================================    
    -- fetch single index to defrage    
    -- =====================================    
    DECLARE CUR_IndexSingle CURSOR LOCAL FORWARD_ONLY READ_ONLY STATIC    
    FOR    
    WITH    
    IDX AS(    
     SELECT     
--      avg_fragmentation_in_percent,    
--      partition_number    
      avg_fragmentation_in_percent = MAX(avg_fragmentation_in_percent)    
     FROM sys.dm_db_index_physical_stats(@db_id, @object_id, @index_id, NULL, @mode)    
     WHERE avg_fragmentation_in_percent &gt; 5    
    )    
    SELECT    
     SQL = N''ALTER INDEX '' + QUOTENAME(@index_name)     
       + N'' ON '' + QUOTENAME(@schema_name) + N''.'' + QUOTENAME(@object_name)    
      + CASE    
        WHEN avg_fragmentation_in_percent &lt; 7 AND @allow_page_locks = 1 THEN N'' REORGANIZE''    
        ELSE N'' REBUILD''    
         + CASE    
           WHEN (@flag_edition = 1 AND @index_id &gt; 1)    
             OR (@index_id = @flag_edition AND @has_maxcolumn = 0)    
            THEN N'' WITH(ONLINE = ON)''    
           ELSE N''''    
          END    
       END    
--      + CASE    
--        WHEN @partition_count &gt; 0    
--         THEN N'' PARTITION =  '' + CONVERT(nvarchar(20), partition_number)    
--        ELSE N''''     
--       END    
    FROM IDX    
    DECLARE    
     @sql nvarchar(max)    
    OPEN CUR_IndexSingle    
    FETCH CUR_IndexSingle INTO @sql    
    WHILE @@FETCH_STATUS = 0    
    BEGIN    
     BEGIN TRY    
      -- record index defrage    
      SET @_log_recordid_defrage = NULL    
      INSERT TempTable.dbo.DBAIndexErrorLog(    
       DatabaseName, TableName, IndexName,    
       SQLCommand)    
      VALUES(    
       @db_name, QUOTENAME(@schema_name) + N''.'' + QUOTENAME(@object_name), @index_name,    
       @sql)    
      SET @_log_recordid_defrage = SCOPE_IDENTITY()    
   
      -- index defrage    
  --    PRINT(@sql)    
      EXEC sp_executesql @sql    
    
      -- update index defrage record    
      UPDATE A SET    
       FinishDate = GETDATE(),    
       ProcessFlag = 1    
      FROM TempTable.dbo.DBAIndexErrorLog A    
      WHERE IDENTITYCOL = @_log_recordid_defrage    
      UPDATE A SET    
       ProcessFlag = 1    
      FROM TempTable.dbo.DBAIndexErrorLog A    
      WHERE IDENTITYCOL &lt; @_log_recordid_defrage    
       AND ErrorNumber &lt;&gt; 0    
       AND ProcessFlag = 0    
       AND DatabaseID = CHECKSUM(@db_name)    
       AND TableID = CHECKSUM(QUOTENAME(@schema_name) + N''.'' + QUOTENAME(@object_name))    
       AND IndexID = CHECKSUM(@index_name)         
     END TRY    
     BEGIN CATCH    
      -- record index defrage error    
      IF @_log_recordid_defrage IS NULL        
       INSERT TempTable.dbo.DBAIndexErrorLog(    
        DatabaseName, TableName, IndexName,    
        SQLCommand,    
        FinishDate, ErrorNumber, ErrorDescription)    
       VALUES(    
        @db_name, QUOTENAME(@schema_name) + N''.'' + QUOTENAME(@object_name), @index_name,    
        @sql,    
        GETDATE(), ERROR_NUMBER(), ERROR_MESSAGE())    
      ELSE    
       UPDATE A SET    
        FinishDate = GETDATE(),    
        ErrorNumber = ERROR_NUMBER(),    
        ErrorDescription = ERROR_MESSAGE()    
       FROM TempTable.dbo.DBAIndexErrorLog A    
       WHERE IDENTITYCOL = @_log_recordid_defrage    
     END CATCH    
    
     FETCH CUR_IndexSingle INTO @sql    
    END    
    CLOSE CUR_IndexSingle    
    DEALLOCATE CUR_IndexSingle    
    
    -- update index process record    
    UPDATE A SET    
     FinishDate = GETDATE(),    
     ProcessFlag = 1    
    FROM TempTable.dbo.DBAIndexErrorLog A    
    WHERE IDENTITYCOL = @_log_recordid_index    
    UPDATE A SET    
     ProcessFlag = 1    
    FROM TempTable.dbo.DBAIndexErrorLog A    
    WHERE IDENTITYCOL &lt; @_log_recordid_index    
     AND ErrorNumber &lt;&gt; 0    
     AND ProcessFlag = 0    
     AND DatabaseID = CHECKSUM(@db_name)    
     AND TableID = CHECKSUM(QUOTENAME(@schema_name) + N''.'' + QUOTENAME(@object_name))    
     AND IndexID = CHECKSUM(@index_name)    
   END TRY    
   BEGIN CATCH    
    -- record index error    
    IF @_log_recordid_defrage IS NULL        
     INSERT TempTable.dbo.DBAIndexErrorLog(    
      DatabaseName, TableName, IndexName,    
      SQLCommand,    
      FinishDate, ErrorNumber, ErrorDescription)    
     VALUES(    
      @db_name, QUOTENAME(@schema_name) + N''.'' + QUOTENAME(@object_name), @index_name,    
      N''sys.dm_db_index_physical_stats('' + RTRIM(@db_id) + N'', '' + RTRIM(@object_id) + N'', '' + RTRIM(@index_id) + N'', NULL, '''''' + RTRIM(@mode) + '''''')'',    
      GETDATE(), ERROR_NUMBER(), ERROR_MESSAGE())    
    ELSE    
     UPDATE A SET    
      FinishDate = GETDATE(),    
      ErrorNumber = ERROR_NUMBER(),    
      ErrorDescription = ERROR_MESSAGE()    
     FROM TempTable.dbo.DBAIndexErrorLog A    
     WHERE IDENTITYCOL = @_log_recordid_index    
   END CATCH    
    
   FETCH CUR_Index INTO @object_id, @index_id, @object_name, @schema_name, @index_name, @partition_count, @allow_page_locks, @has_maxcolumn    
  END    
  CLOSE CUR_Index    
  DEALLOCATE CUR_Index    
'    
    
 -- for each database    
 DECLARE CUR_db CURSOR LOCAL FORWARD_ONLY READ_ONLY STATIC    
 FOR     
 SELECT * FROM #db    
 DECLARE    
  @db_name sysname,    
  @sql nvarchar(max)    
 OPEN CUR_db    
 FETCH CUR_db INTO @db_name    
 WHILE @@FETCH_STATUS = 0    
 BEGIN    
  SELECT    
   @sql = N'    
USE ' + QUOTENAME(@db_name) + N'    
RAISERROR(N''process on database "' + REPLACE(@db_name, N'''', N'''''') + N'"'', 10, 1) WITH NOWAIT    
'    
    + @sql_index    
    
  EXEC sp_executesql @sql,    
   N'    
    @flag_edition int    
   ',    
   @flag_edition    
    
  FETCH CUR_db INTO @db_name    
 END    
 CLOSE CUR_db    
 DEALLOCATE CUR_db    
END TRY    
BEGIN CATCH    
 DECLARE     
  @ErrorMessage    nvarchar(4000),    
  @ErrorNumber     int,    
  @ErrorSeverity   int,    
  @ErrorState      int,    
  @ErrorLine       int,    
  @ErrorProcedure  nvarchar(200)    
 SELECT     
  @ErrorNumber = ERROR_NUMBER(),    
  @ErrorSeverity = ERROR_SEVERITY(),    
  @ErrorState = ERROR_STATE(),    
  @ErrorLine = ERROR_LINE(),    
  @ErrorProcedure = ISNULL(ERROR_PROCEDURE(), '-'),    
  @ErrorMessage = ERROR_MESSAGE();    
    
 RAISERROR(    
        N'Error %d, Level %d, State %d, Procedure %s, Line %d, Message %s ',    
        @ErrorSeverity,     
        1,                   
        @ErrorNumber,    
        @ErrorSeverity,    
        @ErrorState,    
        @ErrorProcedure,    
        @ErrorLine,    
  @ErrorMessage    
        )    
END CATCH
GO

</Entry><Entry KeyWord="index rebuild jy85(2011)" ActionWord=" " Tipo="1" Flag="0">
SELECT * FROM sys.dm_db_index_physical_stats
    (DB_ID(N'ItemMaintain'), OBJECT_ID(N'R_ItemL7DSVSummaryBySO'), NULL, NULL , null);
GO

select * from sys.indexes where
 object_id=object_id('R_ItemL7DSVSummaryBySO')
go

ALTER INDEX IX_ItemNumber_CountryCode ON dbo.R_ItemL7DSVSummaryBySO REBUILD ;</Entry></Snippet>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值