0

私のSQLスクリプトはテンプレートから生成されます。IPアドレスが含まれています。それらが多数存在する可能性があり、オペレーターが誤って誤ったスクリプトを実行する可能性があります。スクリプトは、正しいマシンで起動されたかどうかをどのように確認できますか?(それ以外の場合は、メッセージを印刷して終了します。)

それは可能ですか?

ありがとう、ペトル

4

4 に答える 4

3

更新された回答

これがhttp://weblogs.sqlteam.com/peterl/archive/2008/07/16/How-to-get-IP-address.aspxから見つけたスクリプトで、ニーズに合わせていくつかの変更が加えられています。

DECLARE @TargetIpAddress varchar(15);
SET @TargetIpAddress = '127.0.0.1'; --<== The IP address of the server you want.

DECLARE @Interfaces TABLE
(
    RowID int IDENTITY(0, 1)
   ,Interface char(38)
   ,IP varchar(15)
);

INSERT @Interfaces ( Interface )
  EXEC master..xp_regenumkeys N'HKEY_LOCAL_MACHINE',
       N'System\CurrentControlSet\Services\TcpIP\Parameters\Interfaces';

DECLARE @RowID int
       ,@IP varchar(15)
       ,@Key nvarchar(200);

SELECT @RowID = MAX(RowID)
  FROM @Interfaces;

WHILE @RowID >= 0
BEGIN
    SELECT @Key = N'System\CurrentControlSet\Services\TcpIP\Parameters\Interfaces\' + Interface
     FROM @Interfaces
    WHERE RowID = @RowID;

    EXEC master..xp_regread N'HKEY_LOCAL_MACHINE', @Key, N'DhcpIPAddress', @IP OUTPUT;

    IF @IP <> '0.0.0.0'
    UPDATE @Interfaces
       SET IP = @IP
     WHERE RowID = @RowID;

    SET @RowID = @RowID - 1;
END;

IF NOT EXISTS (SELECT IP FROM @Interfaces WHERE IP = @TargetIpAddress)
BEGIN
    DECLARE @ErrorMessage varchar(2000);
    SET @ErrorMessage  = 'This is not the correct server. This server does not have an IP address of %s.';
    SET @TargetIpAddress = ISNULL(@TargetIpAddress, 'NULL');
    RAISERROR(@ErrorMessage, 16, 1, @TargetIpAddress);
END

-- The rest of the script...

元の回答

IPアドレスの代わりにServer\Instance名を使用すると、操作が簡単になり、サーバーに後日別のIPアドレスが割り当てられた場合に破損する可能性が低くなるようです。

-- You can get the instance name like this:
SELECT @@SERVERNAME +'\'+ @@SERVICENAME AS 'Instance';

-- Although, you might prefer this instead:
SELECT CAST(SERVERPROPERTY('MachineName') AS nvarchar(128))
      +COALESCE('\'+CAST(SERVERPROPERTY('InstanceName') AS nvarchar(128)), '');

-- NetBIOS name of the local computer on which the instance of SQL Server
-- is currently running.
-- If the instance of SQL Server is in a failover cluster and you want to obtain
-- the name of the failover clustered instance, use the MachineName property. 
SELECT SERVERPROPERTY('ComputerNamePhysicalNetBIOS');

SERVERPROPERTY関数の詳細については、MSDN:SERVERPROPERTY(Transact-SQL)を参照してください。ただし、この関数はサーバー/インスタンスのIPアドレスを取得する方法を提供しません。この情報を提供する組み込み関数はありません。

于 2012-11-04T07:19:48.083 に答える
1
Create Procedure P_GetIPAddresses (@IPS varchar(4000) out)
as
begin
Select @IPS=''
Create TABLE #temp (Line varchar(200))
Insert #temp exec master..xp_cmdshell 'ipconfig'
Select @IPS = @IPS + Coalesce(RTRIM(Replace(SubString(Line,1,CharIndex(':',line)-1)  ,'.','')) + SubString(Line,CharIndex(':',line) ,200),'')
from #temp
where upper (Line) like '%ADRESS%'
--SELECT * from #tmp --DEBUG
DROP TABLE #temp

end 

xp_cmdshellが無効になっている場合の使用法、アドレスの解析はあなた次第です...

EXEC sp_configure 'show advanced options', 1
GO
-- To update the currently configured value for advanced options.
RECONFIGURE
GO
-- To enable the feature.
EXEC sp_configure 'xp_cmdshell', 1
GO
-- To update the currently configured value for this feature.
RECONFIGURE
GO


Declare @IPS Varchar(4000)

exec P_GetIPAddresses @IPS out
Select  @IPS

EXEC sp_configure 'show advanced options', 1
GO
-- To update the currently configured value for advanced options.
RECONFIGURE
GO
-- To enable the feature.
EXEC sp_configure 'xp_cmdshell', 0
GO
-- To update the currently configured value for this feature.
RECONFIGURE
GO
于 2012-11-05T12:02:59.430 に答える
1

xp_GetIP.dllを提供できましたが、SQL-Server200532ビットでのみテストされています。

EXEC sp_addextendedproc xp_GetIP、'C:\ temp \ xpGetIP.dll'

電話は

Declare @IP varchar(100)

exec xp_GetIP @IP output
print @IP

出力のみ:192.168.69.69

編集:SQL-Server 2008R264ビットals64ビットDLLでの作業

于 2012-11-05T13:25:51.417 に答える
1

再投稿して申し訳ありませんが、SQL-Server内のsystemadataにアクセスする機会が常に不足していることに悩まされ、拡張ストアドプロシージャをWMIへのブリッジとして作成することにしました。

http://bummisoft.de/download/XP_WMI.zipをダウンロードします

呼び出しは次のようになります。

exec xp_wmiv3 'Select * from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE'

DLLは、32ビットおよび64ビットのSQLServerで使用でき、商用以外では無料で使用できます。

インストール:

EXEC sp_addextendedproc xp_wmiv3, '<Your Path>\XP_WMIV3_DLL.dll'

例えば: EXEC sp_addextendedproc xp_wmiv3, 'C:\DLLs\XP_WMIV3_DLL.dll'

アンインストール

EXEC sp_dropextendedproc xp_wmiv3

使用法

例えば

exec xp_wmiv3 'SELECT * FROM Win32_Volume'
exec xp_wmiv3 'SELECT * FROM CIM_Userdevice where Name like "%HID%"'



create table #tmp(
    Domain varchar(255),
    Name varchar(255),Sid varchar(255)
)
insert into #tmp 
exec xp_wmiV2 'SELECT Domain, SID, Name FROM Win32_UserAccount where Status = "OK"'
select * from #tmp
drop table #tmp

現在、SQL-Server2005およびSQL-Server2008でテストされています。

于 2012-11-09T22:42:55.623 に答える