设计可以具有特定国家/地区字段的数据库模式的最佳实践是什么。
例如一个示例客户表
id
name
email
social_security_number (USA person ID)
curp (Mexico person ID)
cpf (Brazil person ID)
zip (USA postal code)
cep (Brazil postal code)
postcode (UK postal code)
Run Code Online (Sandbox Code Playgroud)
但是由于我们为每个国家/地区提供了更多特定字段,因此该表最终会包含很多字段。
另一种方法是使用代码代替
id
field001 > name
field002 > email
field003 > social security number for any country
field004 > postal code for any country
Run Code Online (Sandbox Code Playgroud)
我知道每种方法都有其优点和缺点。
我正在尝试传递要在NOT IN
操作中使用的项目数组:
ALTER FUNCTION [dbo].[fnTEST] (@CODES VARCHAR)
RETURNS TABLE
AS
RETURN
(
SELECT
T1.CODE AS 'CODE',
(SELECT COUNT(*)
FROM TABLE1 AS T2 WITH (NOLOCK)
WHERE T2.CODE NOT IN (@CODES)
) AS 'COUNT'
FROM TABLE1 T1 WITH (NOLOCK)
)
Run Code Online (Sandbox Code Playgroud)
然后我这样称呼它:
SELECT * FROM fnTEST ('500,250,202,900,204,200,300,400,600,800')
Run Code Online (Sandbox Code Playgroud)
那行不通。如果我尝试在没有引号的情况下调用它,则会收到参数过多的错误(这是预期的)。
有解决方案吗?