0

顧客名から顧客を検索する必要があるselectステートメントがありますIDIDその名前のが存在しない場合は、customerテーブルに新しいレコードを作成する必要があります。これは、selectステートメントの一部として実行する必要があります(実行元のアプリに関連します)。

関数からテーブルを変更できないことに気付く前に、既存IDまたは新規のいずれかを返すUDFを調べてみました。ID

これを達成する方法はありますか?

編集:

もう少し明確にする必要があると思います。selectステートメントは、実装ごとに変更できます。私が探しているのは、より大きなselectステートメントの一部として顧客IDを検索または作成する一般的な方法です(そのテーブルと検索を実行する必要性は変わりません)。

SQLを使用しているアプリは、構成ファイルからselectステートメントをロードし、'SELECT'ハードコーディングされているため、selectなどの前にexecを追加する可能性はありません。

必要なのはのようなもののよう'select a.1 (exec dotheLookup(name)) as customerID, a.2 FROM tableですが、どうすればいいのかわかりません。

4

3 に答える 3

1

このためのストアド プロシージャを作成することをお勧めします。何かのようなもの

Create procedure customer
--parameters
AS
Begin
IF exists(Select lookup(customerName) as customerID from table)
  BEGIN
    --Your select goes here
  END 
ELSE
  BEGIN
   --Insert into customer table and return scopeidentity
   --Select goes here
  END

END

更新された回答:

select ステートメントを使用してデータ操作を実行することはできません。

于 2013-03-18T11:54:23.537 に答える
0

データベースサーバーを変更できますか? その場合は、ローカル サーバーを指すリンク サーバーを追加します。

EXEC master.dbo.sp_addlinkedserver @server = N'LinkedLocal', @srvproduct=N'', @provider=N'SQLNCLI', @datasrc=N'LocalServerName'
 EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'LinkedLocal',@useself=N'True',@locallogin=NULL,@rmtuser=NULL,@rmtpassword=NULL

次に、作業を行うストアド プロシージャを呼び出す OPENQUERY を実行します。

select * from OPENQUERY("LinkedLocal", 'exec Database.Schema.StoredProcedure ''Param1'', ''Param2'')
于 2013-03-19T22:03:02.167 に答える
0

SELECT ステートメントを実行する前に、名前から ID を返す関数を実行するストアド プロシージャを実行できます。

exec CheckForCustomerByNameAndAddIDIfItDoesntExist(customerName)
declare iCustomerID int
select iCustomerID = GetCustomerIDFromName(customerName)
select a.1, a.2, iCustomerID  as customerID from table

そんな感じ

于 2013-03-18T11:50:17.023 に答える