相关疑难解决方法(0)

SQL Server字符串或二进制数据将被截断

我参与了一个数据迁移项目.当我尝试将数据从一个表插入另一个表(SQL Server 2005)时,我收到以下错误:

消息8152,级别16,状态13,行1
字符串或二进制数据将被截断.

源数据列与数据类型匹配,并且在目标表列的长度定义内,因此我不知道可能导致此错误的原因.

t-sql sql-server migration data-migration sql-server-2005

132
推荐指数
8
解决办法
43万
查看次数

URL的最佳列类型是什么?

SQL Server的URL字段的最佳列类型是什么?

键入:VARCHAR或NVARCHAR?

长度

类似的问题MySQL.

sql-server url column-types

46
推荐指数
2
解决办法
3万
查看次数

为什么UDF比子查询慢得多?

我有一个案例,我需要翻译(查找)同一个表中的几个值.我编写它的第一种方法是使用子查询:

SELECT
    (SELECT id FROM user WHERE user_pk = created_by) AS creator,
    (SELECT id FROM user WHERE user_pk = updated_by) AS updater,
    (SELECT id FROM user WHERE user_pk = owned_by) AS owner,
    [name]
FROM asset
Run Code Online (Sandbox Code Playgroud)

因为我使用这个子查询很多(也就是说,我有大约50个带有这些字段的表),我可能需要在子查询中添加更多代码(例如,"AND active = 1")我想我d将这些放入用户定义的函数UDF并使用它.但使用该UDF的性能非常糟糕.

CREATE FUNCTION dbo.get_user ( @user_pk INT )
RETURNS INT
AS BEGIN 
    RETURN ( SELECT id
             FROM   ice.dbo.[user]
             WHERE  user_pk = @user_pk )
END

SELECT dbo.get_user(created_by) as creator, [name]
FROM asset
Run Code Online (Sandbox Code Playgroud)

#1的性能不到1秒.#2的表现大约是30秒......

为什么,或者更重要的是,我有什么方法可以在SQL Server 2008中编码,这样我就不必使用这么多子查询了?

编辑:

只是对这个有用时的更多解释.当我想为用户提供文本时,这个简单的查询(即获取用户ID)会变得更加复杂,因为我必须加入配置文件来获取语言,并与公司一起查看该语言是否应该被提取'而是从那里编辑,并与翻译表,以获得翻译的文本.对于大多数这些查询,性能是可读性和可维护性的次要问题.

sql sql-server performance user-defined-functions sql-server-2008

12
推荐指数
2
解决办法
9683
查看次数