0

名と名前に基づいてデータを取得しようとしています。1つのDBにいくつかの追加データがあることを除いて、互いに2つのDBレプリカがあります。以下は、同じためのストアドプロシージャです。問題は、データの最初の部分をフェッチしたいということです(つまり、arを検索すると、arronのようにarで始まる名前が表示されますが、Sharonのように中央には表示されません)。クエリは一方のデータベースでは正常に機能し、もう一方のデータベースでは機能しません。

   ALTER PROCEDURE [dbo].[SEARCH]
(
@firstName nvarchar(50),
@lastName nvarchar(50),
@state nvarchar(50),
@county nvarchar(50),
@searchspan nvarchar(5)
)
AS

BEGIN 
declare @queryString nvarchar(max)
declare @countyId nvarchar(50)
SET QUOTED_IDENTIFIER OFF 

Create table #temp1(
county nvarchar(50) NULL,
ID nvarchar(50) NULL,
name nvarchar(200) NULL,
state nvarchar(50) NULL,
FirstName nvarchar(50) NULL,
LastName nvarchar(50) NULL,
county nvarchar(50) NULL,
)
set @queryString = 'insert into #temp1 select  distinct a.Source as county, a.ID as ID, a.FirstName +'' ''+ a.LastName as name, ''' +
 @state +''' as state,a.FirstName,a.LastName,b.county, from Person a, CountySite b where 1=1 and a.Source=b.sourcecounty '

 if(@searchspan<>'')
 BEGIN
 set @queryString = @queryString  = 1'
 END
  EXECUTE  sp_executesql  @queryString
  set @queryString ='select county, ID, name, state,col_FirstName,col_LastName,col_county, from #temp1 where 1=1 '
 if(@firstName <> '')
BEGIN 
 set @queryString = @queryString+ ' and UPPER(col_FirstName) like ''' +@firstName +'%'''
END
if(@lastName <> '')
BEGIN 
 set @queryString = @queryString + ' and UPPER(col_LastName) like ''' +@lastName +'%'''
drop table #temp1
END
4

2 に答える 2

0

2番目のDBで実行されているクエリを確認できるように、プロファイラーはありますか?それが同じであることを確認するためだけに。にやにや笑いのためだけに、DBにSPをドロップして再実行してみてください。

于 2012-10-25T12:19:37.050 に答える
0

TSQL では大文字と小文字が区別されないため、UPPER を使用する必要はありません

また、クエリを次のように変更します

set @queryString = @queryString + ' and col_LastName like @lastName +'%'

これを試して

SET @queryString = @queryString + ' AND col_LastName  LIKE '''+@lastName +'%'''
于 2012-10-25T12:48:17.747 に答える