小编gbn*_*gbn的帖子

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

使用sql server查询远程数据库?

我已经使用sp_addlinkedserver访问远程机器db现在我在数据库上显式编写查询,如,

从[server\instance] .database.owner.tablename中选择*

有了这个,

  1. [Server\instance]:必须明确提供
  2. [数据库]:我们可以使用像ms_ForEachDB这样的查询在指定实例上查找数据库吗?
  3. [owner]:我们可以使用查询找到数据库所有者名称吗?

如果使用查询我们是否需要使用EXEC发现这些值()来执行,否则我们仍然可以使用nice查询实现的呢?

谢谢大家,

t-sql sql-server linked-server

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

SQL Server - 使用LIKE子句搜索带有国际字符的字符串

我有一个字段'描述',可以有任何unicode字符的产品描述.如果我搜索包含国际字符的描述,并且具有LIKE条件(搜索的单词没有国际字符),我会得到以下结果:

例如:GEWÜRZTRAMINER是其中一个描述.当我做:

Select * from table where Description LIKE '%GEWURZTRAMINER%', it retrieves the entry.
Run Code Online (Sandbox Code Playgroud)

当我做:

Select * from table where Description LIKE '%GEWURZ%', the entry is not retrieved.
Run Code Online (Sandbox Code Playgroud)

(注意:搜索条件不包括Ü但有U)

有没有办法解决这个问题,以便我可以使用'%GEWURZ%'进行检索?

sql t-sql sql-server pattern-matching sql-server-2008

3
推荐指数
1
解决办法
1724
查看次数

在T-SQL中如何显示给定表名的列?

我试图列出我选择的任何Adventureworks表中的所有列.我可以执行哪些T-sQL语句或存储过程来查看所有列的列表?我想使用我的C#Web应用程序输入一个输入参数= table_name,然后获取所有column_names的列表作为输出.现在我正在尝试执行sp_columns存储过程,但是我不能只使用select和exec组合的一列.有人知道怎么做这个吗?

感谢大家的所有回复,但没有一个答案符合我的要求.让我更多地为您解释我的问题.下面的查询返回我需要的内容.但我的问题是将这个逻辑合并到一个带有输入参数的SP中.所以这是成功的SQL语句:

select col.name from sysobjects obj inner join syscolumns col 
    on obj.id = col.id
    where obj.name = 'AddressType' 
     order by obj.name
Run Code Online (Sandbox Code Playgroud)

目前我的SP看起来像:

CREATE PROCEDURE [dbo].[getColumnNames]
    @TableName VarChar(50)
    AS

    BEGIN
    SET NOCOUNT ON;
    SET @TableName = RTRIM(@TableName)
    DECLARE @cmd AS NVARCHAR(max)
    SET @cmd = N'SELECT col.name from sysobjects obj ' +
    'inner join syscolumns col on obj.id = col.id ' +
    'where obj.name = ' + @TableName
    EXEC sp_executesql @cmd
    END
Run Code Online (Sandbox Code Playgroud)

但我按上述方式运行

exec getColumnNames 'AddressType'
Run Code Online (Sandbox Code Playgroud)

它给了我错误:

Invalid column name …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server exec adventureworks

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

检查null varbinary(max)列的效率?

使用SQL Server 2008.

示例表:

CREATE table dbo.blobtest
(id int primary key not null,
name nvarchar(200) not null, 
data varbinary(max) null)
Run Code Online (Sandbox Code Playgroud)

示例查询:

select id, name, 
cast((case when data is null then 0 else 1 end) as bit) as DataExists 
from dbo.blobtest 
Run Code Online (Sandbox Code Playgroud)

现在,查询需要返回一个"DataExists"列,如果blob为null,则返回0,否则返回1.

这一切都很好,但我想知道它的效率如何.即,SQL服务器是否需要将整个blob读入其内存,或者是否有一些优化,以便它只进行足够的读取以确定blob是否为空?

(FWIW,对于此示例,sp_tableoption"超出行的大值类型"选项设置为OFF).

t-sql sql-server sql-server-2005 sql-server-2008

3
推荐指数
1
解决办法
2436
查看次数

嵌套在Linq中选择顶部1

有一些问题想出这一个.

select*,(从chicken_photo选择top1 chicken_nr,其中鸡=代码顺序为[sort])作为Chicken的照片

代码是Table Chicken中的一列

基本上得到这只鸡的封面照片.

为了更清楚,我希望它从表Chicken返回多行.但只有一个来自chicken_photo的条目.

var q = from chicken in data.chickens
                    join photos in data.chicken_photos
                    on chicken.Code equals photos.chicken                    
                    where chicken.Lang==lang && chicken.photographer_nr == nr
                    group chicken by new     {chicken.photographer,photos.Photograph_Nr,chicken.Title,chicken.Code}              
Run Code Online (Sandbox Code Playgroud)

.net c# sql linq

3
推荐指数
1
解决办法
7297
查看次数

SQL中的转义字符

请原谅我,因为我是一个sql noob.我正在尝试使用以下内容进行插入,但是我对撇号有问题.我有很多要插入的记录,但很多都有同样的问题.有没有逃脱它们的方法?

INSERT INTO  [dbo].[tb_Chefs] ([ChefHotelID], [HotelID], [ChefID],   
     [Position],  [GroupID])  
VALUES(N'b809a86e-f7f2-45b2-a240-0049f51509d7' ,N'14481', N'624', 
     N'Chef d'atelier', N'331')
GO
Run Code Online (Sandbox Code Playgroud)

任何帮助非常感谢.

sql string sql-server-2005

3
推荐指数
1
解决办法
1514
查看次数

如何判断SQL Server 2008中创建约束的方法是什么?

有两种方法可以创建约束,

方法A:

ALTER TABLE dbo.<tablename> ADD CONSTRAINT
<namingconventionconstraint> UNIQUE NONCLUSTERED
(
<columnname>
Run Code Online (Sandbox Code Playgroud)

方法B:

CREATE UNIQUE NONCLUSTERED INDEX
<namingconventionconstraint> ON dbo.<tablename>
(
<columnname>
) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)

但是,似乎需要使用依赖于它们的创建方式(Drop约束与drop index)的方法来删除这些约束.有没有办法确定创建约束的方法,而不是尝试方法并查看它是否失败?我知道你可以让SQL Server为你创建一个drop脚本,但我正在寻找某种查询.

sql sql-server constraints sql-server-2008

3
推荐指数
1
解决办法
124
查看次数

选择前10行,然后确定要包含哪些行

我在表中有2列.第1列代表不同公司的名称,第2列显示产品数量.

COL 1         COL 2
CompA         2323
CompB         2320
CompC         1999
CompD         1598
CompE         1400...so on
Run Code Online (Sandbox Code Playgroud)

我想要做的是显示前10行显示前10个公司名称及其在desc顺序中的计数.然后我想比较第10个公司数和第11个公司数.如果匹配,则显示第11个公司名称及其计数.如果第10个公司计数与第11个公司计数不匹配,则仅显示前10个记录.

我只读访问权限,因此无法在表中更新或插入新记录.

如何才能做到这一点?

sql oracle greatest-n-per-group

3
推荐指数
1
解决办法
2162
查看次数

GROUP BY时间为24小时制

给定以下声明,其中在表DATA中的给定时间(TIME)处为用户(USER)注册任意事件:

CREATE TABLE DATA
(
  "USER" Varchar(20),
  "TIME" Time
);


INSERT INTO DATA ("USER", "TIME") VALUES ('Martin', '14:58:00.000');
INSERT INTO DATA ("USER", "TIME") VALUES ('Martin', '15:02:11.000');
INSERT INTO DATA ("USER", "TIME") VALUES ('Martin', '15:48:44.000');
INSERT INTO DATA ("USER", "TIME") VALUES ('Marion', '08:45:01.000');
INSERT INTO DATA ("USER", "TIME") VALUES ('Marion', '15:01:01.000');
INSERT INTO DATA ("USER", "TIME") VALUES ('Marion', '15:03:48.000');
Run Code Online (Sandbox Code Playgroud)

在给定的一小时内找到每个用户的事件数量是微不足道的:

select 
    "USER", 
    extract(hour from "TIME") as "Hour",
    count(*)
from 
    DATA
group by
    "USER", 
    extract(hour from "TIME")
;
Run Code Online (Sandbox Code Playgroud)

结果当然是:

USER  |Hour|COUNT
------+----+----- …
Run Code Online (Sandbox Code Playgroud)

sql

3
推荐指数
1
解决办法
1507
查看次数