スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

MyDrop ・・・ あればテーブル削除

「テーブルを削除する」という簡単なことも、「なければエラー」になったり、「一時テーブルはtempDBを見に行くため、USEコマンドをつかわないとだめ」だとか、かなりめんどう。。。

特に一時テーブル(#が先頭につくテーブル)は厄介。tempDBというところに格納されるらしい。


なので、「あればテーブル削除」するストアドプロシージャを作成。


CREATE PROCEDURE MyDrop
@mytable nvarchar(255)
AS
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(@mytable))
BEGIN
exec('drop table ' + @mytable );
print '--- ' + @mytable + ' has been dropped.'
END
ELSE
BEGIN
declare @objid int
set @objid =OBJECT_ID('tempdb..'+@mytable)
IF EXISTS (SELECT * FROM tempDB.dbo.sysobjects WHERE id = @objid)
BEGIN
exec('drop table ' + @mytable );
print '--- ' + @mytable + ' has been dropped.'
END
END
GO


SQL Serverでの切り捨て

SQL Serverは、整数切り捨てのint関数が使えない。
なので、ROUND関数を使う。

SELECT ROUND(123.45, 0, 1); -> 123
SELECT ROUND(234.56, 0, 1); -> 234(切り捨て)

ストアド:テーブルの有無(あるかどうか)で分岐させる

テーブルがあるばあいは、そのテーブルをドロップ(削除)するストアドプロシージャ。
ストアドの書き方・引数あるバージョンの書き方・IF文・EXISTS関数・BEGINとかの要素が入ってます。
関数のどこからどこまでって区切りが、CとかVBとかに比べてアバウトだなぁと感じてたんですが、「BEGIN」を使えばOKということを最近しった。。。


----------------------------
CREATE PROCEDURE TABLE_ARUNO
@TBLNAME char(100)
AS
BEGIN
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(@TBLNAME))
BGEGIN
exec('drop table CONTACTINFOVIEW_'+@year)
print 'table has been dropped [CONTACTINFOVIEW_'+@year+']'
END
END
go

--↓マクロ実行 --
TABLE_ARUNO 'MYTABLE' ;
----------------------------

リンクサーバー作成をSQLで

SQLServer2005のリンクサーバーを管理するGUIがとっても不安定なため、外部のサーバーを使うごとに接続⇔切断を行うためのプログラム

-- Adding linked server:
exec sp_addlinkedserver @server = N'リンクサーバー名',@srvproduct = N'Sybase',@provider = N'MSDASQL',@datasrc = N'ODBC接続名'
exec sp_addlinkedsrvlogin @useself=N'False ',@rmtsrvname = N'リンクサーバー名',@rmtuser = N'ID',@rmtpassword = N'PW'
PRINT CONVERT(varchar, GETDATE(), 120);
go

insert into データベース.dbo.*****
select *
from OPENQUERY(リンクサーバー名, 'SQL文')
;
---------------------------------------------*/

exec sp_dropserver 'リンクサーバー名', 'droplogins';
PRINT CONVERT(varchar, GETDATE(), 120);
go


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。