�����ڵ�λ�ã� ������ >> ������ >> WEB������ >> ����

�÷Ƕ�̬SQL Server SQL������Զ�̬��ѯ����ִ��

���ߣ����� ��Դ���������� ����ʱ�䣺2017-7-24
�����

 ��������Ҫ���ҽ������ǷǶ�̬SQL ServerSQL���ִ�ж�̬��ѯ����ʵ�ʲ������ҳ�����һ���洢�����У������д���һϵ���Զ��Ż������޵�ֵ�����Խ�����������ơ���������ʲôʱ������IN�Ӿ���ʹ�ñ���������õ�������Ϣ��

�Ƿ����һ�ֲ�ִ�ж�̬SQL���Ҳ����ɲ�ѯ�ķ�ʽ��?

�ҳ�����һ���洢�����д���һϵ���Զ��Ż������޵�ֵ�������ƽ��������������ʲôʱ������IN�Ӿ���ʹ�ñ���������õ�������Ϣ���Ƿ����һ�ֲ�ִ�ж�̬SQL ServerSQL���Ҳ����ɲ�ѯ�ķ�ʽ��?

ר�ҽ��

�������һ�ֲ�ִ�ж�̬SQL ServerSQL���Ҳ����ɲ�ѯ�ķ�ʽ������������������̽��������⡣�ҽ�����������������AdventureWorks���ݿ⡣

����ֻ��һ��ֵ��ʱ��ִ�н�������ʲô���⡣

Declare @ManagerIDs Varchar(100) 
Set @ManagerIDs = '3' 
Select * from HumanResources.Employee 
Where ManagerID IN (@ManagerIDs) 

����һ�������Ӷ��ţ�����ͻ�������£�

Declare @ManagerIDs Varchar(100) 
Set @ManagerIDs = '3,6' 
Select * from HumanResources.Employee 
Where ManagerID IN (@ManagerIDs) 
Msg 245, Level 16, State 1, Line 4 
Conversion failed when converting the varchar value '3,6' to data type int. 

������ΪSQL Sever�ֱ��ManagerID����һ����������˻��Զ���@ManagerIDsת���ɱ�����

Ϊ�˽��������⣬��������ö�̬SQLִ�������䡣�������������ִ����֮ǰ��̬�ؽ���������ѯ��

Declare @ManagerIDs Varchar(100) 
Set @ManagerIDs = '3,6' 
Declare @SQL Varchar(1000) 
Set @SQL = 
'Select * from HumanResources.Employee 
Where ManagerID IN (' + @ManagerIDs + ')' 
EXEC (@SQL) 

����������ִ�������ѯ�����Ƕ�̬SQL�Ǹ�Σ�շ��ӣ���һЩ�ض�����֯��������������ʹ�á�

��ô��Ҫ����ڲ�ʹ�ö�̬SQL�������ִ�в�ѯ��?����ͨ��XMLʵ�֡�

��һ��������Ҫ��һ���Զ��������޵��ַ����в���һ��XML�ֶΡ�

Declare @ManagerIDs Varchar(100) 
Set @ManagerIDs = '3,6' 
DECLARE @XmlStr XML 
SET @XmlStr = 
--Start Tag 
'' + 
--WordStr all commas with an ending tag and start a new tag 
REPLACE( @ManagerIDs, ',', '') + 
--End Tag 
'' 

���ţ�ѡ�����XMLֵ�������ʾ���£�

Select @XmlStr 

��Ȼ����һ��XML�ֶΣ����ǾͿ��Բ�ѯ�������������ʾ���£�

SELECT x.ManagerID.value('.', 'INT') AS A 
FROM @XmlStr.nodes('//ManagerID') x(ManagerID) 

���ڣ����������֮ǰ�IJ�ѯ�����ƽ����

SELECT * 
FROM HumanResources.Employee 
WHERE ManagerID IN( 
SELECT x.ManagerID.value('.', 'INT') AS A 
FROM @XmlStr.nodes('//ManagerID') x(ManagerID) 
)

���ߣ����������Inner Join�����ƽ����

SELECT * 
FROM HumanResources.Employee AS A 
INNER JOIN 
(SELECT x.ManagerID.value('.', 'INT') AS ManagerID 
FROM @XmlStr.nodes('//ManagerID') x(ManagerID)) B 
ON A.ManagerID = B.ManagerID 
ת����ע��:������(лл����)
�������ۣ�